gpt4 book ai didi

javascript - 在 WebkitView 中注入(inject) JavaScript 以监听文档正文以查找不适用于所有网页的任何点击事件

转载 作者:行者123 更新时间:2023-11-29 06:01:29 24 4
gpt4 key购买 nike

我正在将 javascript 注入(inject)到 webkitView 中,以监听文档正文中的任何点击事件,但不幸的是,该脚本不适用于所有网页,如“https://www.zara.com ”,否则它适用于其他网页,如 google 等。 .

这是我的代码:

import UIKit
import WebKit

class ViewController: UIViewController {

@IBOutlet weak var webView: WKWebView!
private var url = URL(string: "https://www.google.com")!


override func viewDidLoad() {
super.viewDidLoad()

initializeWebView()
loadData()

}

private func initializeWebView() {

let javascript = """
window.onload = function() {
document.addEventListener("click", function(evt) {
var tagClicked = document.elementFromPoint(evt.clientX, evt.clientY);
window.webkit.messageHandlers.jsMessenger.postMessage(tagClicked.outerHTML.toString());
});
}
"""

let userScript = WKUserScript.init(source: javascript,
injectionTime: .atDocumentStart, forMainFrameOnly: true)
webView.configuration.userContentController.addUserScript(userScript)
webView.configuration.userContentController.add(self, name: "jsMessenger")
}

private func loadData() {
let request = URLRequest(url: url)
webView?.load(URLRequest.init(url: url))
}
}


extension ViewController: WKScriptMessageHandler {
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
print(message.body)
}
}

最佳答案

您应该使用 forMainFrameOnly: false 参数初始化 WKUserScript。您可以在此处找到有关此参数的详细信息: WKUserScript forMainFrameOnly

关于javascript - 在 WebkitView 中注入(inject) JavaScript 以监听文档正文以查找不适用于所有网页的任何点击事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54633349/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com