WKWebView-在goBack操作上未调用didFinishNavigation或DecisionPolicyForNavigationResponse

时间:2020-06-05 10:28:24

标签: wkwebview

我不确定它是否是通常的行为,但是在[WKWebView goBack]上从“后退”列表导航到上一页。但是,在我的第一个后退动作中,它不会调用didFinishNavigation委托方法。

因此,如果是通常的行为,那么在执行该操作后如何检测页面加载已完成。

2 个答案:

答案 0 :(得分:0)

您是否在特定的iOS版本上看到此消息?我也看到了这一点,并且仅引发错误,页面刚刚停止加载,因此didFinish ...没有被调用。

从13.4(或13.4.1)开始,我才开始看到它

---编辑---

我确实有解决方法。

在速度较慢的网络上以及用户在页面完全加载之前进行交互时,这种情况似乎更经常发生。通常,如果用户在他们访问的页面完成加载之前点击回去,则会引发“已取消”错误。

现在似乎正在发生的事情是,如果他们返回的页面在离开的那一点从未完成,那么错误会再次抛出,但是这次引用的是他们返回的页面。更重要的是,此时Web视图不再加载。

我们要做的是监视此情况,并检查是否未加载页面,如果未加载,请重新加载。这似乎可行,虽然不理想,但它使我们有时间研究适当的修复程序。

此外,我对此设置了重试限制,尽管在实践中我们从未见过超出第一次重载尝试的情况,但在第三次尝试后显示重载按钮会显示错误。

几乎立即抛出错误的事实意味着重新加载不会为用户带来明显的延迟。

答案 1 :(得分:0)

我什至在模拟器上看到了这一点。导航到google.com,依次单击“隐私”和“ goBack”,然后,当页面正常加载时,导航会报告失败并显示错误:

Error Domain=NSURLErrorDomain Code=-999 "(null)" UserInfo={NSErrorFailingURLStringKey=https://www.google.com/, NSErrorFailingURLKey=https://www.google.com/, _WKRecoveryAttempterErrorKey=<WKReloadFrameErrorRecoveryAttempter: 0x600003904e40>}

您需要做的是使用didFailNavigation:委托方法捕获并进行优雅处理(如果您看到如上所示的一致错误,甚至可以将其视为成功)。