IOS里嵌套h5,h5返回app的操作

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>  

猜你喜欢

转载自blog.csdn.net/journeynana/article/details/84555185