我有一个使用 javascript 的网站,它使用 Angular 来控制您在网站上看到的内容。所以http://somewebsite.com/#page1 http://somewebsite.com/#page1显示,当您单击位置更改为的选项卡时http://somewebsite.com/#page2 http://somewebsite.com/#page2。网站上不会有实际的重新加载,因此func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!)
不会被触发。如何捕捉这些哈希变化?
显然 Apple 可以,因为 Safari 网络浏览器能够在地址栏中显示这些更改。
19.33 更新:
我做了一些研究。使用window.onhashchange
在 Safari 浏览器中,这将被触发,但在 WKWebView 中却不会。深入研究后,我使用以下 javascript 每秒返回文档位置 href。
window.setInterval(function(){ alert(document.location) }, 1000);
当在 WKWebView 中阅读该警报时,它永远不会显示位置发生变化,而在 Safari 中您会看到http://somewebsite.com/#page1 http://somewebsite.com/#page1 and http://somewebsite.com/#page2 http://somewebsite.com/#page2。 WKWebView 似乎不支持此功能,这非常烦人。
不需要注入任何JS。我用了webView.addObserver(self, forKeyPath: "URL", options: .new, context: nil)
这是检测任何 URL 更改,包括哈希更改。然后:
override func observeValue(
forKeyPath keyPath: String?,
of object: Any?,
change: [NSKeyValueChangeKey: Any]?,
context: UnsafeMutableRawPointer?) {
if object as AnyObject? === webView && keyPath == "URL" {
onURLChange(webView.url) // onURLChange does whatever you want
}
}
别忘了webView.removeObserver(self, forKeyPath: "URL")
in deinit
尽管阻止。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)