Mar*_*ark 5 macos hash swift wkwebview
我有一个使用 javascript 的网站,它使用 Angular 来控制您在网站上看到的内容。因此,显示http://somewebsite.com/#page1 ,当您单击选项卡时,该位置将更改为http://somewebsite.com/#page2。网站上不会实际重新加载,因此func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!)不会被触发。如何捕捉这些哈希变化?
显然 Apple 可以,因为 Safari 网络浏览器能够在地址栏中显示这些更改。
19.33 更新:
我做了一些研究。在 Safari 浏览器中使用window.onhashchange这将被触发,但在 WKWebView 中却不会。深入研究后,我使用以下 javascript 每秒返回文档位置 href。
window.setInterval(function(){ alert(document.location) }, 1000);
Run Code Online (Sandbox Code Playgroud)
在 WKWebView 中阅读该警报时,它永远不会显示位置发生变化,而在 Safari 中,您会看到http://somewebsite.com/#page1和http://somewebsite.com/#page2。WKWebView 似乎不支持此功能,这非常烦人。
let script = WKUserScript(source: "(function() { \"use strict\"; addEventListener(\"hashchange\", function(event) { webkit.messageHandlers.hashchangeMessageHandler.postMessage(null); }); }) ();", injectionTime: WKUserScriptInjectionTime.atDocumentEnd, forMainFrameOnly: false)
let configuration = WKWebViewConfiguration()
configuration.userContentController.add(self, name: "hashchangeMessageHandler")
configuration.userContentController.addUserScript(script)
self.webView = WKWebView(frame: CGRect.zero, configuration: configuration)
Run Code Online (Sandbox Code Playgroud)
现在您可以使用以下命令获取哈希更改后的 URL:
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
print("Received message: \(message.name): \(message.body)")
print(self.webView.url)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2673 次 |
| 最近记录: |