wkwebview 监听打印consolelog object-c代码
在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方法就会被调用,并打印出相应的信息
原文地址: https://www.cveoy.top/t/topic/iTng 著作权归作者所有。请勿转载和采集!