需求
<button type="button" onclick="jsFun('参数')">js调用oc的按钮2</button>
ios 里面只有上面html代码,需要点击时获取参数进行处理
实现
- 需要注入的js代码,自定义方法名自己起
function jsFun(x){window.webkit.messageHandlers.自定义方法名.postMessage(x);}
- 在OC中,将上面js代码 jsFun 以字符串的形式传给 WKUserScript
NSString *scriptStr = [NSString stringWithFormat:@"function jsFun(x){window.webkit.messageHandlers.自定义方法名.postMessage(x);}"];
WKUserScript *userScript = [[WKUserScript alloc] initWithSource:scriptStr injectionTime:WKUserScriptInjectionTimeAtDocumentEnd forMainFrameOnly:YES];
[_userContentController addUserScript:userScript];
- WKWebView 需要遵守WKScriptMessageHandler协议,并注册JS消息:
WKUserContentController *_userContentController = [[WKUserContentController alloc] init];
// name 必须与 JS 发送消息时的名字对应
[_userContentController addScriptMessageHandler:self name:@"自定义方法名"];
WKWebViewConfiguration *_configuration = [[WKWebViewConfiguration alloc] init];
_configuration.userContentController = _userContentController;
_wkWeb = [[WKWebView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width,self.view.bounds.size.height/2 - 20) configuration:_configuration];
- WKScriptMessageHandler 协议只有一个方法 方法功能就是接受JS消息
- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message {
// WKScriptMessage 类的name属性是消息名称,body是发送的数据
NSLog(@"message.name:%@", message.name);
NSLog(@"message.body:%@", message.body);
}
- 输出结果
message.name: 自定义方法名
message.body: 参数
至此,WKWebview 监听 dom 事件并获取参数就完成了
发表评论: