Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios WKWebView。未调用didStartProvisionalNavigation_Ios_Swift_Webkit_Wkwebview - Fatal编程技术网

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
完整示例代码 Info.plist 添加您的Info.plist传输安全设置

<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