JS与OC交互,JS中调用OC方法(获取JSContext的方式)
最近用到JS和OC原生方法调用的问题,查了许多资料都语焉不详,自己记录一下吧,如果有误欢迎联系我指出。
JS中调用OC方法有三种方式:
1.通过获取JSContext的方式直接调用OC方法
2.通过继承自JSExport的方式调用delegate中的方法
3.截取URL的方式(此种方式资料很多,就不写了)
先上OC代码
- (void)webViewDidFinishLoad:(UIWebView *)webView {<br /> <br />
// 设置javaScriptContext上下文
self.jsContext= [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
<em>// 方法一 __weak typeof(self) weakSelf = self; self.jsContext[@"getMessage"] = ^(){ return [weakSelf blockCallMessage]; }; // 方法二 self.jsContext[@"JavaScriptInterface"] = self; } - (NSString *)blockCallMessage {<br />return @"call via block"; } #pragma mark - JSCallDelegate // 提供给JS调用的方法 - (NSString *)tipMessage {<br />return @"call via delegate"; }</em>
HTML代码
<html> <head> </head> <body> <script> function buttonClick1() { // 方法一 var token = getMessage(); alert(token) } function buttonClick2() { // 方法二 var token = JavaScriptInterface.tipMessage(); alert(token) } </script> <button id="abc" onclick="buttonClick1()">function </button> <button id="abcd" onclick="buttonClick2()">function </button> </body> </html>
方法一中的jsContext[@"getMessage"]需要和JS中调用的方法名一致,既JS中需要直接调用getMessage(),而jsContext[@"getMessage"]则赋值为一个block,这个block中调用的方法就是JS中调用getMessage()就是执行这个block;
方法二中的jsContext[@"JavaScriptInterface"] = self其中的JavaScriptInterface可以随便命名,保持JS中和该命名保持一致即可,JS中通过JavaScriptInterface来调用继承自JSExport的delegate中的方法,即JavaScriptInterface.tipMessage()
相关推荐
BitTigerio 2018-04-03
81731290 2014-03-22
yqmfly 2015-01-23
python大数据 2019-08-27
邓孟鑫 2019-07-19
Jplane 2019-06-30
84334052 2019-06-27
算法的天空 2017-01-11
xingweiyong 2016-03-09
UrbanHooker 2015-01-23
Bigheart 2014-09-22
BenOnceMore 2013-12-30
89283517 2012-10-22
小小小石头 2012-05-08
yueluck 2016-05-09
choupiaoyi 2018-06-27
iOSliang 2017-11-15
青峰客 2014-03-10
yunhuaikong 2015-08-09