JS调用OC
此时就要用到WKScriptMessageHandler了
//首先.m中加入属性
@property (nonatomic ,strong)WKUserContentController * userCC;
//1 遵循WKScriptMessageHandler协议
//2 初始化
WKWebViewConfiguration * config = [[WKWebViewConfiguration alloc]init];
self.wkWebViw = [[WKWebView alloc]initWithFrame:self.view.bounds configuration:config];
[self.wkWebViw loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:self.webPageUrl]]];
[self.view addSubview:self.wkWebViw];
self.userCC = config.userContentController;
[self.userCC addScriptMessageHandler:self name:@"callOSX"];
//此处相当于监听了JS中callFunction这个方法
[self.userCC addScriptMessageHandler:self name:@"callFunction"];
//当JS发出callFunction这个方法指令的时候, WKScriptMessageHandler的协议方法中我们就会收到这个消息
pragma mark WKScriptMessageHandler delegate
- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message
{
//这个回调里面, message.name代表方法名(‘本例为 callFunction’), message.body代表JS给我们传过来的参数
}
//最后, VC销毁的时候一定要把handler移除
-(void)dealloc
{
[_userContentController removeScriptMessageHandlerForName:@"callFunction"];
}
//对应的JS代码
<button onclick="buttonClick('温馨提示')">点我</button>
<script>
function buttonClick(string){
//JS调用OC, 格式如下
//(window.webkit.messageHandlers.Method_Name.postMessage(parameterToOC))
window.webkit.messageHandlers.callFunction.postMessage(string)
}
</script>
网友评论