WKWebView在没有互联网访问时不会完成/超时
WKWebView does not finish/timeout when there is no internet access
我通过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可以让页面用来找出内容加载错误。验证外部脚本是否已加载有一些提示)
- 使用优化器在慢速连接上加载main.js时需要js超时
- 我们如何在互联网断开连接或用户关闭选项卡/浏览器时调用注销servlet
- 当浏览器控制台未打开时,为什么要求会导致Internet Explorer 9超时
- 超时功能的性能
- 使用不同的超时对数组中的每个项目进行角度动画处理
- 设置第一次执行的超时
- node.js测试事件是否是在不使用超时的情况下使用sinon.js发出的
- 我如何让jQuery使用Greasemonkey 0.8脚本(在Firefox 2上),在没有互联网的情况下使用PC
- 使用javascript和随机暂停/超时快速循环文本
- 如何在jQuery事件处理程序中存储和重用超时
- 当定位模式设置为“0”时,总是达到关于地理定位的超时;仅设备”;
- 为什么页面重新加载会使设置超时无效,以及如何避免
- 立即设置超时
- 在promise中为回调添加超时并拒绝
- 如何设置$.ajax请求的超时,并在超时时间过长时进行重做
- iOS Safari Javascript设置超时问题
- 如何将嵌套设置超时转换为承诺
- XMLHTTPRequest脚本中没有internet连接和超时
- 当没有互联网连接时,谷歌地图Java脚本API处理
- WKWebView在没有互联网访问时不会完成/超时