Ios WKWebView。未调用didStartProvisionalNavigation
我在我的应用程序中使用了Ios WKWebView。未调用didStartProvisionalNavigation,ios,swift,webkit,wkwebview,Ios,Swift,Webkit,Wkwebview,我在我的应用程序中使用了WKWebView,在用户开始使用之前,一切正常。对于本网站的主页,一切都很好,但当用户离开主页,例如转到本网站的任何其他页面时,将不调用委托方法didStartProvisionalNavigation和didCommitNavigation。但是我需要这些方法来检测导航的开始decidePolicyForNavigationAction在一开始就被调用,但是它被调用了多次,我觉得使用这种方法并不是一个完美的解决方案。所以我的问题是:在这种情况下我能做什么?在该网站上有
WKWebView
,在用户开始使用之前,一切正常。对于本网站的主页,一切都很好,但当用户离开主页,例如转到本网站的任何其他页面时,将不调用委托方法didStartProvisionalNavigation
和didCommitNavigation
。但是我需要这些方法来检测导航的开始decidePolicyForNavigationAction
在一开始就被调用,但是它被调用了多次,我觉得使用这种方法并不是一个完美的解决方案。所以我的问题是:在这种情况下我能做什么?在该网站上有什么特别的东西不允许WKWebView
调用其委托方法,在这种情况下,什么可能是可靠的解决方案?谢谢我对网站开发不太了解,但在我看来,money.cnn.com网站的JavaScript存在问题。站点页面和它们的加载之间的转换似乎是在JavaScript的帮助下进行的。JavaScript与本机WKWebView处理程序冲突
但是!您可以在页面开始处使用处理程序注入自己的JavaScript。当页面开始打开时,脚本将首先工作
细节
- Xcode版本10.2.1(10E1001),Swift 5
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
NSAppTransportSecurity
NSAllowsArbitraryLoads
或
结果
更多
将委托设置为:
webView.navigationDelegate = self
谢谢你的帮助,但它不起作用。如果我像您的示例那样使用它,它就是有效的—显式加载请求。它适用于网站的主页。但是,当我从money.cnn.com转到或任何其他子页面时,不会调用委托方法。我唯一能做的就是将false传递到FormInframe,这样它也可以工作,但它会导致调用委托方法太频繁,无法加载页面上的每个资源,这很奇怪。我做了一些小的修改,并添加了控制台的屏幕截图。看一看。在我的示例中,在显示每个页面之前都会触发脚本。从头开始创建一个新项目,然后将代码复制粘贴到那里。仅适用于第一页,即显式调用load时。如果我进一步浏览userContentController didReceive message(从未调用过方法)),在func userContentController()中,我们只检测页面(编辑此函数以显示所有URL)。你可能会打开另一个cnn网站吗?不,这个方法本身没有被调用。我当然查过了
webView.navigationDelegate = self