iOS WKWebView 检测 JavaScript 方法调用 - _proto.querencaozuo
在 iOS 的 WKWebView 中,无法直接判断是否有 JavaScript 代码调用了' _proto.querencaozuo' 方法,因为这个方法是在 JavaScript 中定义的,并且 WKWebView 无法直接获取 JavaScript 代码的执行信息。
不过,你可以通过在 WKWebView 的代理方法webView:didReceiveScriptMessage:中监听 JavaScript 代码发送的消息,从而判断是否有 JavaScript 调用了' _proto.querencaozuo' 方法。具体步骤如下:
- 首先,在你的 ViewController 中,实现 WKScriptMessageHandler 协议,并在初始化 WKWebView 时设置其代理:
@interface YourViewController () <WKScriptMessageHandler>
@property (nonatomic, strong) WKWebView *webView;
@end
@implementation YourViewController
- (void)viewDidLoad {
[super viewDidLoad];
WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc] init];
[configuration.userContentController addScriptMessageHandler:self name:@'querencaozuo'];
self.webView = [[WKWebView alloc] initWithFrame:self.view.bounds configuration:configuration];
[self.view addSubview:self.webView];
}
- (void)dealloc {
[self.webView.configuration.userContentController removeScriptMessageHandlerForName:@'querencaozuo'];
}
#pragma mark - WKScriptMessageHandler
- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message {
if ([message.name isEqualToString:@'querencaozuo']) {
// 有 JavaScript 调用了' _proto.querencaozuo' 方法
NSLog(@'JavaScript 调用了' _proto.querencaozuo' 方法');
}
}
@end
- 在 JavaScript 代码中,使用
window.webkit.messageHandlers.querencaozuo.postMessage()方法发送消息给 WKWebView:
// JavaScript 代码中
window.webkit.messageHandlers.querencaozuo.postMessage('');
当 JavaScript 代码中调用了window.webkit.messageHandlers.querencaozuo.postMessage()方法后,会触发 WKWebView 的webView:didReceiveScriptMessage:代理方法,从而可以判断是否有 JavaScript 调用了' _proto.querencaozuo' 方法。
原文地址: https://www.cveoy.top/t/topic/qzru 著作权归作者所有。请勿转载和采集!