【问题标题】:Injecting JavaScript in WebkitView to listen to document body for any click event not working for all web pages在 WebkitView 中注入 JavaScript 以监听任何点击事件的文档正文不适用于所有网页
【发布时间】:2019-07-05 02:41:28
【问题描述】:

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

这是我的代码:

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)
    }
}

【问题讨论】:

    标签: javascript ios swift webkit


    【解决方案1】:

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

    【讨论】:

    • 谢谢你的好回答,在所有网页脚本加载完成后,我不得不在DocumentEnd注入脚本
    猜你喜欢
    • 2015-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-22
    • 2021-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多