我有一个UiWebView,它指向一个会话在30分钟内处于活动状态的外部站点。在我的应用程序中,我无法在远程站点中使用一个自定义登录页面,该页面已嵌入该应用程序中。该登录页面是:

file://index.html


当用户将应用程序置于后台时,如果应用程序在后台停留超过20分钟,我想自动重新加载我的登录页面(我知道这样做并不理想,但是由于业务需求而被迫这样做) 。

我的代码很简单:

static NSDate *lastActivity = nil;

- (void)applicationWillResignActive:(UIApplication *)application
{
    lastActivity = [NSDate date];
}

- (void)applicationDidBecomeActive:(UIApplication *)application
{
    NSDate *now = [NSDate date];
    NSTimeInterval time = [now timeIntervalSinceDate:lastActivity];
    if(time > 60 * 20){
       UIWebView *view = self.viewController.webView;
       NSURL *url = [NSURL URLWithString:self.viewController.startPage];
       NSURLRequest *request = [NSURLRequest requestWithURL:url];
       [view loadRequest:request];

    }
}


但是,当我这样做时,我收到错误消息:

Failed to load webpage with error: Frame load interrupted


我了解这可能是因为某些内容会自动从一种URL方案转到另一种URL方案,而无需用户交互。有没有办法做到这一点?

最佳答案

我认为您将需要在UIWebView委托方法中处理file://协议。例如。

- (BOOL)webView:(UIWebView *)theWebView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
   // Intercept the external http requests and forward to Safari.app
    // Otherwise forward to the PhoneGap WebView
    if ([[url scheme] isEqualToString:@"http"] || [[url scheme] isEqualToString:@"https"]) {
        [[UIApplication sharedApplication] openURL:url];
        return NO;
    }
    else {
        return [ super webView:theWebView shouldStartLoadWithRequest:request navigationType:navigationType ];
    }
}


在您的情况下,告诉委托方法如何处理您的url方案。例如。

if ([url.scheme isEqualToString:@"file"]) {
    NSLog(@"Open start page");
    [[UIApplication sharedApplication] openURL:url];
    return NO;
}


不知道这是否对您有用,但是希望它将提供解决方案的途径。

关于ios - iOS UiWebView“框架加载中断”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23473780/

10-15 15:27