首页 文章

WKWebView使用某些Web配置在本地网页加载时挂起 .

提问于
浏览
3

我有一个WKWebView,使用 WKWebViewConfiguration 加载一组本地网页,将 @"allowFileAccessFromFileURLs" 的配置设置为true .

请求设置如下:

NSURL *url = [[NSBundle mainBundle] URLForResource:@"testPage" withExtension:@"html" subdirectory:@"html/pages"];
NSURLRequest *req = [[NSURLRequest alloc] initWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:10.0f];

然后使用以下WKWebview方法发送请求:

- (nullable WKNavigation *)loadRequest:(NSURLRequest *)request;

我的问题是设备有当前连接但没有网络流量 . 作为屏幕上元素的webview将被添加到屏幕并且将发出请求,但webview将在显示本地内容之前显示白色屏幕约50秒 .

当没有链接调节器设置时,无论网络状态如何,webview中的所有内容都会加载 .

例如,如果设备连接到无线但网络链路调节器设置为100%丢失 . 创建webview并发送请求以加载触发负载挂起的本地内容 .

我有一个想法,可能是WKWebView尝试在后台进行某种需要网络交易的验证,但我在Safari浏览器中进行了一些网络分析,还有一些时间线记录,我看不到任何会导致它要挂了 .

我能想到它在50秒左右后加载本地内容的唯一原因是它在某种情况下会加载某种WKWebView超时以加载网络连接 .

非常感谢任何帮助,谢谢 .

1 回答

  • 0

    好吧,对于那些偶然发现这一点的人,我发现了我做错了什么 .

    问题实际上不是WKWebview或Web内容本身就是我处理webview加载完成的方式 .

    在方法中:

    - (void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigation *)navigation{
    

    我正在通过评估一些JS来监听事件的完成,如下所示:

    -(void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigation *)navigation
    {
    
        [webView evaluateJavaScript:@"document.body.innerHTML" completionHandler:^(id result, NSError *error) 
        {
            if (result != nil) {
            [self doCertainNetworkEvent]; //here another method is called with a networking function inside of it. 
        }
            if(error) 
            {
                NSLog(@"evaluateJavaScript error : %@", error.localizedDescription);
            }
        }];
    
    }
    

    完成块当然无法完成,直到didFinishNavigation方法调用中的网络功能完成(由于没有流量,它无法完成) .

相关问题