前端方法與客戶端方法相互通信機(jī)制

脈脈上的一些回答:

  • 根本上來說是一種通信協(xié)議,通過最基本的數(shù)據(jù)類型映射到內(nèi)存地址短条。
  • 簡單理解是大家都可以和 c++ 互調(diào)叶堆,用c++ 中轉(zhuǎn)干旧。給 window 中提供一個(gè)可操作對(duì)象,這個(gè)對(duì)象直接調(diào)用 c++ 層對(duì)象涕俗,c++ 層這個(gè)對(duì)象會(huì)和java層對(duì)象綁定罗丰,java 到 c++ 就是一個(gè)執(zhí)行注冊(cè)表。
  • 互調(diào)方式不太相同再姑,一種實(shí)現(xiàn)方式舉例萌抵,安卓在初始化 webview 的時(shí)候可以向js 掛載方法和數(shù)據(jù)對(duì)象,屬于 BOM,和 alert 之類的方法一樣绍填,瀏覽器執(zhí)行棧執(zhí)行對(duì)應(yīng)方法時(shí)運(yùn)行瀏覽器 native code 方法霎桅。(BOM 瀏覽器對(duì)象模型,提供與瀏覽器交互的方法和接口讨永。)安卓調(diào)前端是因?yàn)榘沧坑性L問 js context 的能力滔驶,類似于在全局中eval一串js代碼字符串。
  • webview 提供了js runtime卿闹,客戶端理論上可以在js runtime中掛載任意對(duì)象揭糕,前端調(diào)用掛載的對(duì)象,瀏覽器執(zhí)行棧執(zhí)行對(duì)應(yīng)方法時(shí)運(yùn)行客戶端 native 方法锻霎,經(jīng)js 引擎調(diào)到客戶端代碼著角。
  • JNI Java Native Interface,是 java 提供的一個(gè)特性量窘,使得 C/C++ 等語言編寫的代碼可以運(yùn)行于 java虛擬機(jī) jvm 中的 java 代碼集成雇寇,如java中使用 以 C/C++ 等native 語言編寫的程序庫,JNI 能夠滿足在java代碼中訪問native模塊的需求蚌铜。framework層的webview實(shí)際上是jni調(diào)用chromium的代碼锨侯,chromium代碼是c++,解析完js冬殃,發(fā)現(xiàn)符合規(guī)范囚痴,直接調(diào)用上層的js bridge 的方法
  • 調(diào)用底層 jni 函數(shù)由 v8 內(nèi)核實(shí)現(xiàn)的审葬,最終在 c 層完成轉(zhuǎn)換深滚,到 c 層完成到 java 的轉(zhuǎn)換。
  • 可以看看 chromium 項(xiàng)目頭文件涣觉,都是可以調(diào)用的痴荐,也可以給 web 注入 native 對(duì)象,js 調(diào)方法時(shí)會(huì)傳給 native proxy
  • 其他的版本官册,客戶端調(diào)用 h5 接口生兆,需要支持當(dāng)前平臺(tái)的橋接代碼 + 需要調(diào)用的通用接口代碼,當(dāng)一個(gè)版本的客戶端調(diào)用 jsapi 時(shí)膝宁,輸入接口代碼鸦难,后臺(tái)會(huì)根據(jù) rpc 或者 http 請(qǐng)求來的 ua 匹配對(duì)應(yīng)的橋接代碼。接口代碼 + 橋接代碼可以正常實(shí)現(xiàn)功能员淫,早期沒有 jsbridge 的時(shí)候需要程序員根據(jù)終端版本選擇橋接代碼合蔽,現(xiàn)在只需要接口代碼。

Android在js上下文注入一個(gè)JavascriptInterface介返,假設(shè)名為AndroidInterface拴事,在前端可以直接以AndroidInterface.funName的形式調(diào)用沃斤。

Android 通過 loadUrl 直接加載頁面鏈接
webview.loadUrl('https://www.google.com.hk/')

Android 通過loadUrl執(zhí)行js的方法
webview.loadUrl('javascript: WebSpace.funName()')

url scheme是一種 url 形式,web端通過隱藏的iframe加載src挤聘,Android 通過 shouldOverrideUrlLoading攔截Scheme轰枝,返回falsewebview處理鏈接url组去,返回true鞍陨,webview依據(jù)程序執(zhí)行url

基本原理就是:H5 -> 觸發(fā)一個(gè)url(每一個(gè)功能代表的url都不同)-> Native端捕獲到url -> Native端分析屬于哪一個(gè)功能并執(zhí)行 -> Native端調(diào)用H5中的方法將執(zhí)行結(jié)果回調(diào)給H5

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末从隆,一起剝皮案震驚了整個(gè)濱河市诚撵,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌键闺,老刑警劉巖寿烟,帶你破解...
    沈念sama閱讀 219,490評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異辛燥,居然都是意外死亡筛武,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門挎塌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來徘六,“玉大人,你說我怎么就攤上這事榴都〈猓” “怎么了?”我有些...
    開封第一講書人閱讀 165,830評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵嘴高,是天一觀的道長竿音。 經(jīng)常有香客問我,道長拴驮,這世上最難降的妖魔是什么春瞬? 我笑而不...
    開封第一講書人閱讀 58,957評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮套啤,結(jié)果婚禮上宽气,老公的妹妹穿的比我還像新娘。我一直安慰自己纲岭,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評(píng)論 6 393
  • 文/花漫 我一把揭開白布线罕。 她就那樣靜靜地躺著止潮,像睡著了一般。 火紅的嫁衣襯著肌膚如雪钞楼。 梳的紋絲不亂的頭發(fā)上喇闸,一...
    開封第一講書人閱讀 51,754評(píng)論 1 307
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼燃乍。 笑死唆樊,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的刻蟹。 我是一名探鬼主播逗旁,決...
    沈念sama閱讀 40,464評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼舆瘪!你這毒婦竟也來了片效?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤英古,失蹤者是張志新(化名)和其女友劉穎淀衣,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體召调,經(jīng)...
    沈念sama閱讀 45,847評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡膨桥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了唠叛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片只嚣。...
    茶點(diǎn)故事閱讀 40,137評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖玻墅,靈堂內(nèi)的尸體忽然破棺而出介牙,到底是詐尸還是另有隱情,我是刑警寧澤澳厢,帶...
    沈念sama閱讀 35,819評(píng)論 5 346
  • 正文 年R本政府宣布环础,位于F島的核電站,受9級(jí)特大地震影響剩拢,放射性物質(zhì)發(fā)生泄漏线得。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評(píng)論 3 331
  • 文/蒙蒙 一徐伐、第九天 我趴在偏房一處隱蔽的房頂上張望贯钩。 院中可真熱鬧,春花似錦办素、人聲如沸角雷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽勺三。三九已至,卻和暖如春需曾,著一層夾襖步出監(jiān)牢的瞬間吗坚,已是汗流浹背祈远。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留商源,地道東北人车份。 一個(gè)月前我還...
    沈念sama閱讀 48,409評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像牡彻,于是被迫代替她去往敵國和親扫沼。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評(píng)論 2 355