javascript - 一個關於客戶端和前端通訊的懷疑?
大家讲道理
大家讲道理 2017-05-16 13:27:34
0
1
622

客戶端使用WebViewClient類別的shouldOverrideUrlLoading方法來處理前端和客戶端的通訊。在這種情況下,前端如何知道客戶端的處理回呼?
情況如下:

  1. 前端傳送一個既定協定的位址,例如取得目前的使用者jsbridge://bridge/userid

  2. 客戶端捕捉到這個載入然後開始執行操作,例如往前端寫值javaScript:window.userId=12121

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

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

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

那這個種場景該怎麼辦呢?

大家讲道理
大家讲道理

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

全部回覆(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/...

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板