微信小程序與web-view網(wǎng)頁(yè)進(jìn)行通信的嘗試

????????首先局义,微信小程序向web-view傳遞數(shù)據(jù)一般通過(guò)地址欄傳參的形式(給src賦值或者修改hash)鳞上,這樣一般就已經(jīng)能夠滿(mǎn)足實(shí)際開(kāi)發(fā)需求了,所以這里主要探討web-view向微信小程序傳參几颜。下面笼踩,我們從官方文檔入手,基于web-view標(biāo)簽自身的能力特點(diǎn)做一些嘗試:

一谷市、JSSDK提供的wx.miniProgram.postMessage

????????文檔中說(shuō)此方法只能在“小程序后退蛔垢、組件銷(xiāo)毀、分享迫悠、復(fù)制鏈接”時(shí)才會(huì)觸發(fā)鹏漆,意思也就是說(shuō)通信不是即時(shí)的,而實(shí)際中,我們大多是需要即時(shí)通信的艺玲,所以該方法的用處有限括蝠。

// h5頁(yè)面

wx.miniProgram.postMessage({data: 'foo' })

wx.miniProgram.postMessage({data: {foo: 'bar'} })

// 小程序

<web-view src="{{url}}" bindmessage="messageHandler"></web-view>

1

二、路由跳轉(zhuǎn)(wx.miniProgram.navigateTo/redirectTo等)

????????文檔提供了一些web-view改變小程序路由的方法饭聚,那么能否通過(guò)這些方法傳遞數(shù)據(jù)忌警,然后在小程序中攔截路由,拿到數(shù)據(jù)后再阻止跳轉(zhuǎn)秒梳?答案是不行法绵。原因是:小程序雖然可以通過(guò)wx.onAppRoute監(jiān)聽(tīng)路由變更,但不能阻止路由跳轉(zhuǎn)行為酪碘。

????????另外礼烈,即便是當(dāng)前頁(yè)面跳轉(zhuǎn)到當(dāng)前頁(yè)面也不行(即/page/webview/index跳轉(zhuǎn)到/page/webview/index?a=123),頁(yè)面會(huì)重新加載婆跑,閃現(xiàn)白屏此熬。

2

三、事件綁定bindload

????????web-view標(biāo)簽提供了3個(gè)事件:bindload滑进、bindmessage犀忱、binderror。其中扶关,bindmessage是配合上面的postMessage使用的阴汇;binderror是網(wǎng)頁(yè)加載失敗時(shí)觸發(fā)的;只有bindload(頁(yè)面加載成功時(shí)觸發(fā))存在可利用的契機(jī)节槐。

? ??????3.1 在h5頁(yè)面中修改location.href搀庶,通過(guò)地址欄向小程序傳參

3

????????這是最直接能想到的辦法,H5頁(yè)面不復(fù)雜的話(huà)铜异,用戶(hù)幾乎感覺(jué)不到頁(yè)面重新加載帶來(lái)的影響哥倔。不過(guò),該方式隱性要求我們:在開(kāi)發(fā)時(shí)揍庄,最好將H5頁(yè)面設(shè)計(jì)成“頁(yè)面的所有狀態(tài)都使用地址欄參數(shù)和localStorage來(lái)維護(hù)”咆蒿,這樣,無(wú)論是“小程序變更h5頁(yè)面”還是“h5頁(yè)面向小程序傳遞自身當(dāng)前的狀態(tài)”都會(huì)很方便蚂子。

? ??????3.2 是否可以模擬觸發(fā)load事件來(lái)優(yōu)化上述方式(fail

????????答案是不行的沃测。假如是在h5頁(yè)面內(nèi),模擬觸發(fā)load事件是可行的食茎,但是網(wǎng)頁(yè)內(nèi)window的load并不會(huì)冒泡給web-view標(biāo)簽蒂破。

4

? ??????3.3 是否可以使用多標(biāo)簽來(lái)優(yōu)化上述方式(fail

????????現(xiàn)在的瀏覽器都支持多標(biāo)簽頁(yè),那么web-view標(biāo)簽是否也可以同時(shí)打開(kāi)兩個(gè)標(biāo)簽頁(yè)(頁(yè)面a别渔、頁(yè)面b)附迷,其中頁(yè)面a用來(lái)展示頁(yè)面惧互,頁(yè)面b(假設(shè)它是頁(yè)面a用window.open(‘page-b’, ‘_blank’)打開(kāi)的)則不顯示;需要傳參時(shí)挟秤,頁(yè)面a修改頁(yè)面b的地址壹哺,繼而觸發(fā)load事件,將參數(shù)傳遞給小程序艘刚?

????????答案是不行的管宵。

????????雖然window.open方法可以執(zhí)行,但貌似在web-view中攀甚,“_blank”跟“_self”一樣箩朴,無(wú)論是頁(yè)面a操作頁(yè)面b,還是頁(yè)面b操作頁(yè)面a都操作的是同一個(gè)標(biāo)簽頁(yè)秋度。

? ??????3.4 是否可使用history.pushState/replaceState或修改hash來(lái)觸發(fā)load(fail

????????答案是不行的炸庞。畢竟這兩種方法都只是修改地址,并不影響網(wǎng)頁(yè)內(nèi)容荚斯,而load是需要網(wǎng)頁(yè)加載才可能觸發(fā)埠居。

四、Websocket通信

????????小程序和H5網(wǎng)頁(yè)通過(guò)websocket服務(wù)器進(jìn)行通信事期,這種方式固然很好滥壕,但需要額外成本,此處不作考慮兽泣。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末绎橘,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子唠倦,更是在濱河造成了極大的恐慌称鳞,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件稠鼻,死亡現(xiàn)場(chǎng)離奇詭異冈止,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)枷餐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)靶瘸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人毛肋,你說(shuō)我怎么就攤上這事∥萁#” “怎么了润匙?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)唉匾。 經(jīng)常有香客問(wèn)我孕讳,道長(zhǎng)匠楚,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任厂财,我火速辦了婚禮芋簿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘璃饱。我一直安慰自己与斤,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布荚恶。 她就那樣靜靜地躺著撩穿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪谒撼。 梳的紋絲不亂的頭發(fā)上食寡,一...
    開(kāi)封第一講書(shū)人閱讀 49,144評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音廓潜,去河邊找鬼抵皱。 笑死,一個(gè)胖子當(dāng)著我的面吹牛辩蛋,可吹牛的內(nèi)容都是我干的呻畸。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼堪澎,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼擂错!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起樱蛤,我...
    開(kāi)封第一講書(shū)人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤钮呀,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后昨凡,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體爽醋,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年便脊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蚂四。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡哪痰,死狀恐怖遂赠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情晌杰,我是刑警寧澤跷睦,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站肋演,受9級(jí)特大地震影響抑诸,放射性物質(zhì)發(fā)生泄漏烂琴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一蜕乡、第九天 我趴在偏房一處隱蔽的房頂上張望奸绷。 院中可真熱鬧,春花似錦层玲、人聲如沸号醉。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)扣癣。三九已至,卻和暖如春憨降,著一層夾襖步出監(jiān)牢的瞬間父虑,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工授药, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留士嚎,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓悔叽,卻偏偏與公主長(zhǎng)得像莱衩,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子娇澎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容