1 2 3 4 5 6 7 8
| window.webkit.messageHandlers.<name>.postMessage(<messageBody>) //其中<name>,就是上面方法里的第二个参数`name`。 //例如我们调用API的时候第二个参数填@"Share",那么在JS里就是: //window.webkit.messageHandlers.Share.postMessage(<messageBody>) //<messageBody>是一个键值对,键是body,值可以有多种类型的参数。 // 在`WKScriptMessageHandler`协议中,我们可以看到mssage是`WKScriptMessage`类型,有一个属性叫body。 // 而注释里写明了body 的类型: Allowed types are NSNumber, NSString, NSDate, NSArray, NSDictionary, and NSNull.
|
!!!注意:不可以不传参,否则不会调用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| function scanClick() { window.webkit.messageHandlers.ScanAction.postMessage(null); }
function shareClick() { window.webkit.messageHandlers.Share.postMessage({title:'测试分享的标题',content:'测试分享的内容',url:'http://www.baidu.com'}); }
function playSound() { window.webkit.messageHandlers.PlaySound.postMessage('shake_sound_male.wav'); }
function colorClick() { window.webkit.messageHandlers.Color.postMessage([67,205,128,0.5]); }
|
参考
JS
1 2 3 4 5 6 7 8 9 10 11
| <html> <body> <div id="demo"></div> <script> function test(name){ console.log(name); document.getElementById("demo").innerHTML = name; } </script> </body> </html>
|
Objective-C
1 2 3
| NSString *jsStr = [NSString stringWithFormat:@"test('%@')",@"what the hell"];[self.webView evaluateJavaScript:jsStr completionHandler:^(id _Nullable result, NSError * _Nullable error) { NSLog(@"%@--%@",result,error); }];
|
原生调用VUE
VUE
1 2 3 4 5 6 7 8 9 10 11 12
| export default{ ... created(){ window.nativeCallJS = this.nativeCallJS }, methods:{ nativeCallJS:function(data){ return "return data" + data } } ... }
|
Objective-C
1
| window.webkit.messageHandlers.jsCallNative.postMessage(params)
|
参考1 参考2
OC向JS传值
如果是单个值,可以如下:
如果是多个值,可以传json string。
参考
Author:
班殿宏
License:
Copyright (c) 2020 班殿宏 版权所有