要监听 WKWebView 中的 console.log 输出,可以使用 WKUserContentController 和 WKScriptMessageHandler。

首先,创建一个遵循 WKScriptMessageHandler 协议的类来处理 JavaScript 消息:

class ConsoleMessageHandler: NSObject, WKScriptMessageHandler {
    func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
        if message.name == "consoleLog" {
            print("JavaScript Console Log: \(message.body)")
        }
    }
}

然后,在创建 WKWebView 的时候,设置其 configuration 的 userContentController,并添加一个与 JavaScript 交互的脚本:

let contentController = WKUserContentController()
let consoleMessageHandler = ConsoleMessageHandler()

contentController.add(consoleMessageHandler, name: "consoleLog")

let configuration = WKWebViewConfiguration()
configuration.userContentController = contentController

let webView = WKWebView(frame: .zero, configuration: configuration)

let script = WKUserScript(source: "console.log = function(message) { window.webkit.messageHandlers.consoleLog.postMessage(message); }", injectionTime: .atDocumentStart, forMainFrameOnly: false)
contentController.addUserScript(script)

这样,当 WKWebView 中的 JavaScript 调用 console.log 方法时,会触发 ConsoleMessageHandler 类中的 userContentController(_:didReceive:) 方法,从而打印出 JavaScript 输出

wkwebview 监听打印consolelog

原文地址: https://www.cveoy.top/t/topic/iTnc 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录