javascript - Eine Frage zur Client- und Front-End-Kommunikation?
大家讲道理
大家讲道理 2017-05-16 13:27:34
0
1
623

Der Client verwendet WebViewClient类的shouldOverrideUrlLoadingMethoden, um die Kommunikation zwischen dem Frontend und dem Client abzuwickeln. Woher kennt das Frontend in diesem Fall den Verarbeitungsrückruf des Clients?
Die Situation ist wie folgt:

  1. Das Frontend sendet eine Adresse eines bestimmten Protokolls, z. B. zum Abrufen des aktuellen Benutzersjsbridge://bridge/userid

  2. Der Client erfasst diese Last und beginnt mit der Ausführung von Vorgängen, z. B. dem Schreiben von Werten in das FrontendjavaScript:window.userId=12121

window.location.href = "jsbridge://bridge/userid"

console.log(window.userId) //这样貌似拿不到userId

setTimeout(function() {
   console.log(window.userId) //这样就可以拿到了。
}, 1000)

Was sollen wir in diesem Szenario tun?

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

Antworte allen(1)
Peter_Zhu

我的理解,要想弄懂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/...

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage