在 WKWebView 中监听打印的 console.log 信息,可以通过 WKWebView 的 configuration 对象的 userContentController 属性来添加一个 WKScriptMessageHandler 对象,来处理 JavaScript 发送的消息。

首先,创建一个遵循 WKScriptMessageHandler 协议的 Objective-C 类,例如 ConsoleMessageHandler:

@interface ConsoleMessageHandler : NSObject <WKScriptMessageHandler>
@end

@implementation ConsoleMessageHandler

- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message {
    if ([message.name isEqualToString:'consoleLog']) {
        NSLog('console.log: %@', message.body);
    }
}

@end

然后,在创建 WKWebView 实例时,为其 configuration 对象的 userContentController 属性添加刚才创建的 ConsoleMessageHandler 对象:

WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc] init];
ConsoleMessageHandler *messageHandler = [[ConsoleMessageHandler alloc] init];
[configuration.userContentController addScriptMessageHandler:messageHandler name:'consoleLog'];

WKWebView *webView = [[WKWebView alloc] initWithFrame:self.view.frame configuration:configuration];

在 JavaScript 中,可以使用 window.webkit.messageHandlers.consoleLog.postMessage() 方法将 console.log 的信息发送给 Objective-C 代码:

console.log('Hello, world!');
window.webkit.messageHandlers.consoleLog.postMessage('Hello, world!');

当 JavaScript 中调用 console.log 时,Objective-C 的 ConsoleMessageHandler 对象的 didReceiveScriptMessage 方法就会被调用,并打印出相应的信息。

WKWebView 监听 console.log 信息 - Objective-C 代码示例

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

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