美文网首页
WebViewJavascriptBridge原理解析

WebViewJavascriptBridge原理解析

作者: Adam_潜 | 来源:发表于2018-12-09 07:45 被阅读0次

浏览器拦截请求
通过JS里面创建一个iframe窗口
改变iFrame的src, 相当于浏览器实现了跳转
因此native可以捕获到这个网络请求
然后通过url判断是普通的跳转还是bridge的跳转

OC要调用javascript环境的方法,其实就是调用ExampleApp.html中的bridge.registerHandler注册的方法。

整个框架用的是策略模式, 也就是一个base类, 持有一个delegate, 这个delegate可以是wkwebview bridge, 也可以是uiwebview bridge, 这两个bridge都实现了basedelegate接口.

第一个问题, 如何注册方法

首先oc端有几个字典, 用来储存所有注册的方法, 有具体的名字.js端也一样.

第二个, 那么实现回调, 我们通过一个字典储存回调方法, 用id或者时间戳作为key, 这时候我们调用js方法, 然后希望js再回调的时候, js就通过iframe调用我们这里, 传入回调id, 这时候我们就能运行具体id回调的方法.

总结

分别在OC环境和javascript环境都保存一个bridge对象,里面维持着requestId,callbackId,以及每个id对应的具体实现。
OC通过javascript环境的window.WebViewJavascriptBridge对象来找到具体的方法,然后执行。
javascript通过改变iframe的src来出发webview的代理方法webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler从而实现把javascript消息发送给OC这个功能。
其实这里只是解析了webview与OC交互的桥接问题,其他比如webview中的请求拦截、添加进度条、运营商劫持、如何组织交互规则等问题这里还没有涉及。这些在我们项目中运用,具体就不抽出来了。

https://segmentfault.com/a/1190000008948594
https://www.jianshu.com/p/c895c4bc30fa

相关文章

网友评论

      本文标题:WebViewJavascriptBridge原理解析

      本文链接:https://www.haomeiwen.com/subject/jclhhqtx.html