suchen

Heim  >  Fragen und Antworten  >  Hauptteil

javascript - Eine Frage zur Client- und Front-End-Kommunikation?

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?

大家讲道理大家讲道理2831 Tage vor683

Antworte allen(1)Ich werde antworten

  • 天蓬老师

    天蓬老师2017-05-16 13:29:34

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

    Antwort
    0
  • StornierenAntwort