我有一个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/