iOS 与 js 交互
2015-08-27 17:35
316 查看
</pre><p>webView 上面的点击事件</p><p></p><p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px; font-family:Arial; font-size:14px; line-height:26px">目前很流行的库有WebviewJavaScriptBridge和OVGap,这两个库都是让webview与JS建立起一条桥梁,</p><p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px; font-family:Arial; font-size:14px; line-height:26px">这样就可以相互通信了。</p><p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px; font-family:Arial; font-size:14px; line-height:26px">我目前只使用过WebviewJavaScriptBridge 这个类库,就拿这个来讲</p><p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px; font-family:Arial; font-size:14px; line-height:26px">这个block 是用来接收点击接收到的参数data并赋值给_bridge</p><p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px; font-family:Arial; font-size:14px; line-height:26px"></p><p class="p1"><span class="s1"></span></p><pre name="code" class="objc"> _bridge = [WebViewJavascriptBridge bridgeForWebView:_webView webViewDelegate:self handler:^(id data, WVJBResponseCallback responseCallback) { WWLOG(@"ObjC received message from JS:%@",data); responseCallback(@"Response for message from ObjC"); }];
这个是发送消息到js
[_bridgesend:@"A string sent from ObjC to JS"responseCallback:^(id response) { WWLOG(@"sendMessage got response: %@", response); }];
这个是带参数的
[_bridgecallHandler:@"testJavascriptHandler"data:data responseCallback:^(id response) { WWLOG(@"testJavascriptHandler responded: %@", response); }];
上gihut上面下载一个demo的很清楚的了
--------------------------------------------------------------------
iOS7 后出了了库 JavaScriptCore.frmeworks
#import <JavaScriptCore/JavaScriptCore.h>
这个库更容易使js根oc交互
在webView - (void) webViewDidFinishLoad:(UIWebView *)webView 之后
调用
JSContext *context=[webViewvalueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];//获取js环境 NSString *alertJS=@"alert(‘呵呵’)";//准备执行的js代码 JSValue *result = [contextevaluateScript:alertJS];//通过oc方法调用js的alert //有返回值的话会返回到result里面
对于webView上面的js点击事件
同样要Finishload之后 才能取到环境
JSContext *context=[webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];//获取js环境 JSContext *context=[_webViewvalueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"]; context[@"onclick"] = ^() {//点击调用 onclick是js点击调用的函数名 其实就是吧在js里面的函数调来在oc里面实现 就是oc里面的block实现对应js里面的函数体 NSArray *args = [JSContextcurrentArguments];//args里面装的是onClick(...)里面的参数列表,不是按顺序排列 for (JSValue *jsValin args) { NSLog(@"%@", jsVal); } JSValue *this = [JSContextcurrentThis]; NSLog(@"%@",this); NSLog(@"-------End Log-------"); };
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- Extjs4.0 最新最全视频教程
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- Javascript中toFixed方法的改进
- 评价ui设计作品好坏的八个标准(界面/交互设计研究)
- 5个常见可用性错误和解决方案
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- js可突破windows弹退效果代码
- JSP脚本漏洞面面观
- 使用BAT一句话命令实现快速合并JS、CSS
- Lua和C语言的交互详解
- js显示当前星期的起止日期的脚本
- JQuery与iframe交互实现代码
- 爆炸式的JS圆形浮动菜单特效代码
- Ajax中浏览器和服务器交互详解
- js select常用操作控制代码