jsbridge并發(fā)調(diào)用問題和解決方法

背景:

做hybrid開發(fā)都會(huì)用到j(luò)sbridge,但是最近遇到了一個(gè)問題,同時(shí)并發(fā)發(fā)送多個(gè)請(qǐng)求,native端只能攔截到最后一次請(qǐng)求,前面的請(qǐng)求沒法攔截。然后改成用location.href='scheme'這種方式是可以讓native端都能攔截到,但是會(huì)產(chǎn)生內(nèi)部webview后退時(shí),請(qǐng)求不了native。但是看了下jsbridge的通用做法都是用iframe來發(fā)送scheme請(qǐng)求,但是就會(huì)出現(xiàn)開頭說的并發(fā)發(fā)送的問題,當(dāng)前解決方式是做了個(gè)隊(duì)列,然后把并行調(diào)用強(qiáng)行轉(zhuǎn)成串行調(diào)用。今天看到了新公司得實(shí)現(xiàn)方法,大概思路如下:

iframe并發(fā)發(fā)送多個(gè)請(qǐng)求的實(shí)現(xiàn)思路:

由于公司保密協(xié)議不能提供源代碼,請(qǐng)諒解,說下思路。

  • 假設(shè)jsbridge提供了方法call();
  • 每次調(diào)用call時(shí),會(huì)把當(dāng)前所有的數(shù)據(jù)緩存到一個(gè)數(shù)組變量sendMessage里面。
  • 每次調(diào)用都會(huì)發(fā)送一個(gè)固定的scheme,scheme://jsbridge
  • native接受到這個(gè)消息后,會(huì)調(diào)用js的一個(gè)固定全局方法pullMessage(),該方法返回值是sendMessage數(shù)組里面的所有數(shù)據(jù)的json數(shù)組字符串
  • native拿到j(luò)s方法返回的json數(shù)據(jù)字符串進(jìn)行解析,然后針對(duì)每個(gè)調(diào)用進(jìn)行分發(fā)處理,然后再進(jìn)行回調(diào)相應(yīng)的js方法

以上就巧妙的避免了多次請(qǐng)求即使native只拿到了最后一次請(qǐng)求,也不會(huì)漏掉所有的js調(diào)用native的請(qǐng)求。這種做法是把push改成了pull。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,680評(píng)論 19 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,300評(píng)論 25 708
  • 前言 總結(jié) Android WebView 常用的相關(guān)知識(shí)點(diǎn),令包含以下干貨內(nèi)容分析:Js注入漏洞、WebView...
    無名小子的雜貨鋪閱讀 70,126評(píng)論 17 169
  • 先生游南鎮(zhèn),一友指巖中花樹問曰:“天下無心外之物,如此花樹,在深山中自開自落,于我心亦何相關(guān)?”先生曰:“你未看此...
    悠悠地四月天閱讀 226評(píng)論 0 1
  • 總有人說要遇見最好的自己。 年輕的時(shí)候,你以為最好的自己在將來的某個(gè)地方等待著你去找尋,并且相信總有一天你們會(huì)相遇...
    握瑜閱讀 1,237評(píng)論 0 6

友情鏈接更多精彩內(nèi)容