亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

javascript - 一個關于客戶端和前端通信的疑惑?

瀏覽:97日期:2024-02-23 13:06:03

問題描述

客戶端使用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/...

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 免费网站直接看 | 黄在线观看在线播放720p | 狠狠色狠狠色综合婷婷tag | 婷婷久久综合九色综合九七 | 在线观看视频国产 | 久久久久一区二区三区 | 国产亚洲片 | 鸥美肥妇特级毛片视频 | 日韩中文字幕视频在线 | 女人被狂躁的视频免费免费看 | 妖精www视频在线观看高清 | 欧美性活一级视频 | 国产一区二区三区四区五区六区 | 欧美一级片网站 | 久久爱影视i | 国产一区 在线视频 | 国产亚洲精品看片在线观看 | 四色婷婷 | 香蕉97超级碰碰碰碰碰久 | 成人影院在线观看kkk4444 | 久久99国产精品久久99果冻传媒 | 91音影 | 欧美中文字幕一区二区三区 | 国产精品午夜寂寞视频 | 91福利区 | 伊人色综合琪琪久久社区 | 国产精品一区在线观看 | 成年黄色网 | 免费大片黄在线现看国语 | 亚洲精品国产高清不卡在线 | 亚洲色图日韩精品 | 国产麻豆精品入口在线观看 | 一级做a爱久久久久久久 | 高清大学生毛片一级 | 乱人伦精品一区二区 | 国内拍拍自拍视频在线观看 | 国产精品久久久久久久久久免费 | 国产精品麻豆久久99 | 中文字幕综合网 | 欧美亚洲中日韩中文字幕在线 | 一级生性活免费视频 |