JS 和OC的数据传递
来源:互联网 发布:时标网络图 软件 编辑:程序博客网 时间:2024/06/18 01:28
原创文章,转载请指明原文链接,谢谢。
JS和OC本地的数据传递有几种方式,我说其中的一种原理:
通过在JS中自定义 协议+数据,然后重定向,在oc的webView的代理中获取重定向的
这是一种比较简单的方法。
OC中,iOS 8.0 以上,使用WKWebView,在代理方法
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler
中进行拦截。
// 在发送请求之前,决定是否跳转- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler { NSString *requestStr = [[navigationAction.request.URL absoluteString] stringByRemovingPercentEncoding]; NSLog(@"Load URL : %@ ", navigationAction.request.URL); NSLog(@"requestStr : %@ ", requestStr); //判断是否是双方协定的协议 if ([requestStr hasPrefix:@"CNT://"]) { //使用了JSONKit 将{"result":1}转换成了Dictionary NSDictionary *paramStr = [[requestStr substringFromIndex:6] objectFromJSONString]; NSLog(@"paramStr: %@",paramStr); decisionHandler(WKNavigationActionPolicyCancel); return; } decisionHandler(WKNavigationActionPolicyAllow);}
hmtl的代码如下:
<!DOCTYPE html><html lang="en"> <head> <meta charset="utf-8" /> <title>Test JS to OC</title> </head> <body> <button align onclick='testClick()'>提交</button><script> function testClick(){ //(协议CNT:// + 数据) var data ={ result:1 } //重定向 window.location.href = "CNT://" + JSON.stringify(data); }</script> </body> </html>
testClick()中的CNT://为js和OC之间协定的自定义协议,可以根据个人需要任意取值,但双方要统一。
如果想要处理更多的场景,可以对传递的json数据协定具体的key,根据不同的key指定OC的类、调用方法、参数和值等。
iOS8以下的如果使用UIWebView,道理是一样的,只是webView的delegate处理方法换成 - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request
navigationType:(UIWebViewNavigationType)navigationType
阅读全文
0 0
- JS 和OC的数据传递
- springmvc和js前端的数据传递和接收方式
- springmvc和js前端的数据传递和接收方式
- JS页面间数据传递的各种方法和分析
- OC 和JS的交互
- js的值传递和引用传递
- React.js refs 和props传递数据
- 不同的窗口之间传递数据-OC内存管理
- OC的数据传递-Block,代理,通知,KVO
- vue.js实现数据传递的demo
- js接收action传递的对象数据
- iOS - OC和网页JS的交互
- oc 和 h5中js 的交互
- JS和OC交互的参考
- JS和OC进行交互的总结
- WKWebView的OC和JS交互
- OC 对象作为方法的参数和返回值传递
- Intent传递数据和Bundle传递数据的区别
- centos 6.8 x86_64下autoconf版本升级到2.69
- linux awk 命令笔记
- justfy-content用法
- Android TextView图文混排,图片和文字居中对齐
- 小学生自学奥数必备的这些书籍
- JS 和OC的数据传递
- GANs实现(Generative Adversarial Networks)
- hdu 2177 取(2堆)石子游戏
- c++版本的prim算法最小生成树
- ios app url scheme跳转到淘宝商品详情页 唤醒app
- JDeveloper环境配置WebLogic常见的问题
- tcpdump
- 全栈工程师将会缔造下一个高薪群体
- Akka(18): Stream:组合数据流,组件-Graph components