Ale*_*row 8 javascript ios swift wkwebview
我想抓住每一个onClick事件WKWebView.该网站仅使用JavaScript,所以我无法处理任何事情:
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void)
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
ɯɐɹ*_*ɐɹʞ 17
您可以使用WKUserScript并将其添加到WKWebView配置的userContentController.
let config = WKWebViewConfiguration()
let source = "document.addEventListener('click', function(){ window.webkit.messageHandlers.iosListener.postMessage('click clack!'); })"
let script = WKUserScript(source: source, injectionTime: .atDocumentEnd, forMainFrameOnly: false)
config.userContentController.addUserScript(script)
config.userContentController.add(self, name: "iosListener")
webView = WKWebView(frame: UIScreen.main.bounds, configuration: config)
Run Code Online (Sandbox Code Playgroud)
这将使脚本在文档加载完成后将其注入页面.现在,您需要实现WKScriptMessageHandler协议来接收消息:
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
print("message: \(message.body)")
// and whatever other actions you want to take
}
Run Code Online (Sandbox Code Playgroud)
如果您只想为 ID 为 'buttonX' ( <button id="buttonX">Click me</button>) 的按钮添加点击侦听器,则
let scriptSource = """
var button = document.getElementById('buttonX');
document.body.style.backgroundColor = `red`;
if(button != null) {
button.addEventListener("click", function(){
window.webkit.messageHandlers.iosClickListener.postMessage('open_invitation');
document.body.style.backgroundColor = `green`;
});
}
"""
let config = WKWebViewConfiguration()
let script = WKUserScript(source: scriptSource, injectionTime: .atDocumentEnd, forMainFrameOnly: false)
config.userContentController.addUserScript(script)
config.userContentController.add(self, name: "iosClickListener")
let webView = WKWebView(frame: view.frame, configuration: config)
view.addSubview(webView)
webView.loadHTMLString(html, baseURL: nil) //load your html body here
}
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
if let body = message.body as? String, body == "open_invitation" {
print("? we did it")
}
}
Run Code Online (Sandbox Code Playgroud)
你的视图控制器也应该符合WKScriptMessageHandler协议
| 归档时间: |
|
| 查看次数: |
6524 次 |
| 最近记录: |