iOS WKWebview的OC與JS互動
1、OC調JS的方法
JS要做的準備:
//提供給oc呼叫的方法 function ocToJs() { //隨機改變頁面的背景色 var r=Math.floor(Math.random()*256); var g=Math.floor(Math.random()*256); var b=Math.floor(Math.random()*256); var randomColor = "rgb("+r+','+g+','+b+")"; document.body.style.backgroundColor = randomColor; }
OC要做的準備wkwebview呼叫evaluateJavaScript:
//OC-->JS - (void)ocTakeJsMethod { //OC調js的方法隨機改變html頁面的顏色 NSString *ocToJs = @"ocToJs()"; [self.myWebView evaluateJavaScript:ocToJs completionHandler:^(id _Nullable name, NSError * _Nullable error) { NSLog(@"方法呼叫完成回撥"); }]; }
2、JS調OC的方法
JS要做的準備實現一個方法:
//js調OC的方法 function jsToOc() { //jsSendOcWithPrams是要在OC那邊註冊才可以的。 window.webkit.messageHandlers.jsSendOcWithPrams.postMessage({"oneParam":"傳過去的引數內容"}); }
OC要做的準備分為兩步
//第一步:要註冊相應的方法提供給JS呼叫 //註冊一個html的方法 [userController addScriptMessageHandler:self name:@"jsSendOcWithPrams"]; //第二步: //JS-->OC //這個協議類監聽JavaScript方法從而呼叫原生OC方法.接收來自Html頁面的方法 - (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message { NSLog(@"userContentControllerfdfjdik----%@---%@",message.body,message.name); if ([message.name isEqualToString:@"jsSendOcWithPrams"]) { NSString *keyContent = message.body[@"oneParam"]; UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:@"提示" message:keyContent preferredStyle:UIAlertControllerStyleAlert]; [alertVC addAction:([UIAlertAction actionWithTitle:@"OC顯示" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { }])]; [self presentViewController:alertVC animated:YES completion:nil]; } }
詳細可以參考WKWebViewJSAndOC 的demo:WKWebViewJSAndOC 的demo