javascript - 一个关于客户端和前端通信的疑惑?
问题描述
客户端使用WebViewClient类的shouldOverrideUrlLoading方法来处理前端和客户端的通信。这种情况下,前端如何知道客户端的处理回调?情况如下:
前端发送一个既定协议的地址,比如获取当前的用户jsbridge://bridge/userid
客户端捕捉到这个加载然后开始执行操作,比如往前端写值javaScript:window.userId=12121
window.location.href = 'jsbridge://bridge/userid'console.log(window.userId) //这样貌似拿不到userIdsetTimeout(function() { console.log(window.userId) //这样就可以拿到了。}, 1000)
那这个种场景该怎么办呢?
问题解答
回答1:我的理解,要想弄懂JSBridge,最终需要搞明白三件事,一个是H5如何调用Native,一个是Native如何调用H5,最后一个是两者之间的回调。
H5如何调用Native,网上的的方法殊途同归,就是在WebView加载H5页面的时候会调用WebChromeClient或者是WebviewClient中的方法,选取其中的一个,来截取H5的数据,交由Native处理
Native如何调用H5,归根结底就是一条,webview.loadUrl(javascript:yourFunc(data););会把数据传给H5并执行H5中的yourFunc这个方法
两者之间的回调,即Native或者H5处理好对方的调用后,把结果返回给对方,供对方使用。本质就是把调用函数Callback使用时间戳或者其他的唯一标识通过Map组织起来,即Map(UniqueID,Callback),并把此唯一标示UniqueID传给对方函数,对方执行完毕后,会把这个唯一标示UniqueID和返回数据data传回来,然后通过这个UniqueID找到调用函数CallBack,然后执行CallBack(data)
从你的描述中可以知道,你现在是迷失在第二点上了,你需要在H5中写一个JS方法:
function getUseID(userid){console.log(userid);}
Native中拿到数据后,执行:
webview.loadUrl(javascript:getUseID(userid););
H5中的getUseID方法就会被唤起执行了,数据也成功从Native中接收到
假如是一个完备的JSBridge,上面的第三点是一定要考虑到的。
你这个是Android Hybrid开发,需要一个JSBridge给你一个轮子,大头鬼写的:https://github.com/JerryMissT...推荐几个Blog,看了还是不错的
http://www.cnblogs.com/dailc/...
http://blog.csdn.net/qq_23547...
http://zjutkz.net/2016/04/17/...
相关文章:
1. php - 微信开发验证服务器有效性2. vim中编辑HTML文件时换行不能缩进3. javascript - Ajax返回json格式之后的数据解析后取出来的数据为undefined?4. java导入问题5. css - 文字排版问题,内容都是动态抓出来的,字数不一定。如何对齐啊6. 正则表达式 - Java:字符串替换带序号7. css3 - 微信前端页面遇到的transition过渡动画的bug8. 网页爬虫 - 关于Python的编码与解码问题9. git - 在web应用分布式部署的情况下怎么进行配置更新10. 前端 - WebStrom安装了angularjs插件,但是没有语法提示

网公网安备