ios WKWebview 获取 html 中 dom 点击事件所传递的参数

2020-5-23 Jon 其他

需求

<button type="button" onclick="jsFun('参数')">js调用oc的按钮2</button>

ios 里面只有上面html代码,需要点击时获取参数进行处理

实现

  1. 需要注入的js代码,自定义方法名自己起
function jsFun(x){window.webkit.messageHandlers.自定义方法名.postMessage(x);}
  1. 在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];
  1. 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];
  1. WKScriptMessageHandler 协议只有一个方法 方法功能就是接受JS消息
- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message {
    // WKScriptMessage 类的name属性是消息名称,body是发送的数据
    NSLog(@"message.name:%@", message.name);
    NSLog(@"message.body:%@", message.body);
}
  1. 输出结果

message.name: 自定义方法名
message.body: 参数

至此,WKWebview 监听 dom 事件并获取参数就完成了

标签: js html ios WKWebview dom 事件

分享这篇文章
赞助鼓励:如果觉得内容对您有所帮助,您可以支付宝(左)或微信(右):

声明:如无特殊注明,所有博客文章版权皆属于作者,转载使用时请注明出处。谢谢!

发表评论:

皖ICP备15010162号-1 ©2015-2020 知向前端
qq:1614245331 邮箱:13515678147@163.com Powered by emlog sitemap