我通过WkWebView导航到的本地HTML页面上有一个远程Javscript资产标签,该标签永远不会完成下载(在iOS设备未连接到互联网的情况下,或者设备的互联网太慢)。
不幸的是,WKWebView永远不会中止尝试下载此资产,也不会移动到我的WKNavigationDelegate(即既不调用-webView:didFailNavigation:withError:
也不调用-webView:didFinishNavigation: neither
),因此用户被困在一个空白的HTML页面中,该页面永远不会完全解决,也不会出错。
值得庆幸的是,在某些情况下,我已经通过 Safari 远程 iOS Javascript 调试器进行了调试,我注意到我们收到错误Failed to load resource: The Internet connection appears to be offline
记录到控制台,但在其他情况下(如飞行模式下的某些设备),WKWebView 似乎永远不会因此错误而超时或放弃,因此不会触发 WKNavigationDelegate 回调。
8.2模拟器与任何WKWebView iOS应用程序一起使用自行重现此场景,导航到任何本地提供的HTML文件,然后添加具有任何远程URL的脚本标记,然后使用Apple的网络链接调节器将您的互联网连接限制为"100%丢失"。
通过错误或成功回调到其 WKNavigationDelegate 强制 WkWebView 超时/返回的最佳方法是什么?
尝试:
WKNavigationDelegate
- (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(WKNavigation *)navigation withError:(NSError *)error
您可以检查错误,通常您会遇到错误.code -1009:
检查此列表:错误代码
我认为您必须在HTML页面中执行此操作。您可以在此处包含一个小型 JavaScript,该 JavaScript 运行计时器并检查您的远程脚本是否已加载。
如果尚未加载,则 JavaScript 可以直接在页面中显示错误,或通过脚本消息处理程序通知应用程序。
(我不认为HTML有一个API可以让页面用来找出内容加载错误。验证外部脚本是否已加载有一些提示)