微信小程序webview問題集錦

一邓嘹,為什么要用webview

公司目前要做出行業(yè)務(wù)辕漂,第一個(gè)入口確定為微信小程序。

作為老鳥吴超,不得不多問一嘴钉嘹,后面可能還有其他入口么?

得到的回答是:后續(xù)可能還有支付寶小程序鲸阻,高德小程序跋涣,百度小程序缨睡,公眾號(hào),出行app陈辱。

在這樣一個(gè)需求場(chǎng)景下奖年,我們沒有那么多資源去投入到多端的原生開發(fā),webview方案成了唯一的選擇沛贪。

二陋守,技術(shù)驗(yàn)證

既然要用,那么必然就要進(jìn)行一些技術(shù)驗(yàn)證利赋。

因?yàn)橹坝羞^ioswebview加載h5性能不佳的體驗(yàn)水评,所以當(dāng)時(shí)筆者主要的擔(dān)心是webview加載h5的性能。

迅速寫了demo一嘗試媚送,哇靠中燥,還挺快。

性能不擔(dān)心了塘偎,然后就去網(wǎng)上搜了搜常見問題疗涉。一看都有解決方案,也沒怎么擔(dān)心吟秩。

這個(gè)時(shí)候咱扣,筆者覺得沒什么瓶頸了,按部就班的去開發(fā)就好了涵防。一切都是那么的美好偏窝。

三,項(xiàng)目啟動(dòng)進(jìn)入開發(fā)

問題很快就浮出水面

top10:微信登陸后武学,如何把身份傳給h5

方案:這個(gè)問題比較簡(jiǎn)單祭往,在webview的url字符串上傳遞就是了。迅速解決火窒,這種feel很nice啊

但要注意硼补,當(dāng)小程序從后臺(tái)模式切換到前臺(tái)模式時(shí),在onshow里要進(jìn)行身份的有效性檢查

top9:小程序cookie和微信共享熏矿,切到后臺(tái)不丟失

第一個(gè)頁(yè)面開發(fā)完和后臺(tái)接口聯(lián)調(diào)的時(shí)候已骇,突然發(fā)現(xiàn)token有問題(為了前后交互安全,基于OAuth實(shí)現(xiàn)的令牌)票编。

我們的h5網(wǎng)站也是可以微信瀏覽器訪問的褪储,但發(fā)放的token和小程序的是有差異性的。反反復(fù)復(fù)折騰了兩天慧域,才知道小程序的cookie和微信共享鲤竹,而且后臺(tái)運(yùn)行時(shí)依然保留。

方案:進(jìn)入時(shí)判斷是否小程序昔榴,是的話全部清理token辛藻,重新獲取碘橘,保證cookie數(shù)據(jù)的一致性

top8:判斷是否小程序內(nèi)運(yùn)行

當(dāng)時(shí)開發(fā)人員為了能方便調(diào)試,在代碼中加個(gè)一個(gè)判斷吱肌,如果不在小程序痘拆,就不去調(diào)用小程序的專有api。

寫的有點(diǎn)花里胡哨的氮墨,判斷user-agent纺蛆,后來(lái)發(fā)現(xiàn)ios有bug還兼容了一把。

但筆者總覺得太麻煩规揪,兼容性也不太靠譜桥氏。

方案:小程序webview的url加個(gè)參數(shù)&isSP=true,程序里判斷一把就ok了粒褒。綠色環(huán)保無(wú)污染

top7:堅(jiān)挺的緩存

方案:開發(fā)測(cè)試時(shí),在微信【設(shè)置】->【通用】->【存儲(chǔ)空間】->【緩存】中徹底清理緩存诚镰,以保證加載最新的頁(yè)面

發(fā)布生產(chǎn)后奕坟,就需要有較好的版本管理。首頁(yè)設(shè)置Cache-Control:no-store清笨,始終加載最新html,同時(shí)在首頁(yè)中根據(jù)版本號(hào)判斷是否需要加載最新的js腳本

top6:分享或支付的轉(zhuǎn)彎實(shí)現(xiàn)

微信SDK里面沒有直接分享的調(diào)用月杉。所以這個(gè)地方需要變通實(shí)現(xiàn)

1.在可以分享的頁(yè)面增加一個(gè)分享按鈕

2,當(dāng)點(diǎn)擊該按鈕時(shí)抠艾,打開一個(gè)新的小程序頁(yè)面苛萎,參數(shù)通過url傳遞

3,在新打開的小程序頁(yè)面里检号,進(jìn)行真正的分享操作腌歉。

小程序分享頁(yè)面代碼如下:

top5:?jiǎn)?dòng)小程序如何區(qū)分是否分享進(jìn)入

先看看兩者的實(shí)際場(chǎng)景區(qū)別:

1,通過分享頁(yè)面進(jìn)入齐苛,會(huì)直達(dá)目標(biāo)頁(yè)面翘盖。

2,如果正常啟動(dòng)小程序凹蜂,顯示的是首頁(yè)

哪如何區(qū)分這兩者呢馍驯?可以通過在小程序的app.js的onShow里加代碼處理

top4:高德地圖的優(yōu)化加載

按照標(biāo)準(zhǔn)的方式,在head里加入高德script玛痊,會(huì)有什么問題呢汰瘫?

如下:

1,h5頁(yè)面反復(fù)跳轉(zhuǎn)或返回擂煞,高德地圖多次加載

2混弥,高德地圖的響應(yīng)不穩(wěn)定。慢的時(shí)候會(huì)阻塞整個(gè)頁(yè)面的渲染对省。

因?yàn)楦叩碌貓D在首頁(yè)剑逃,我們想盡快的給用戶顯示內(nèi)容浙宜,以避免客戶流失。

方案如下:

1蛹磺,preload高德地圖js

2粟瞬,在使用的時(shí)候,通過createElement+appendChild的方法萤捆,進(jìn)行懶加載裙品。

3,緩存高德地圖對(duì)象俗或,再次進(jìn)入頁(yè)面如果存在地圖對(duì)象市怎,不進(jìn)行2的操作

最終效果:客戶會(huì)先看到頭部和底部?jī)?nèi)容,高德地圖慢慢顯示辛慰。體驗(yàn)有所提高

top3:webview間sessionStorage數(shù)據(jù)不共享

這個(gè)問題的痛點(diǎn)不在于如何解決区匠。方案可以用cookie或localstoreage來(lái)替代。

重點(diǎn)是不知道帅腌!不知道驰弄!不知道!

top2:返回按鈕實(shí)現(xiàn)

正常情況來(lái)說速客,當(dāng)h5運(yùn)行在瀏覽器的時(shí)候戚篙。

跳轉(zhuǎn)新頁(yè)面左上會(huì)顯示一個(gè)向左的返回箭頭。

哪如果在webview你也想煎餅果子來(lái)一套怎么辦溺职?

和瀏覽器的區(qū)別就是岔擂,你得保證有兩個(gè)webview。然后h5的正常跳轉(zhuǎn)就會(huì)達(dá)到預(yù)期效果浪耘。

我們的做法是乱灵,首頁(yè)是一個(gè)webview,在這個(gè)頁(yè)面上只存在一個(gè)跳轉(zhuǎn)按鈕七冲,該按鈕點(diǎn)擊打開一個(gè)新的webview阔蛉。

top1:后臺(tái)切換到前端的h5加載

該問題只是對(duì)于我們項(xiàng)目是top1問題,大家關(guān)注問題點(diǎn)即可癞埠。

由于我們系統(tǒng)前后端交互加入了OAuth的驗(yàn)證機(jī)制状原,所以會(huì)有一個(gè)token傳遞,該token15分鐘過期

首頁(yè)加載的時(shí)候苗踪,獲取token颠区,通過webview的url傳遞給h5

那么問題來(lái)了,如果小程序被切到后臺(tái)通铲,15分鐘后再切到前臺(tái)怎么辦毕莱?同時(shí)我們還想好好利用這15分鐘的緩存優(yōu)化切換到前臺(tái)的加載速度。

最終方案如下:

1,檢測(cè)是否新用戶朋截,新用戶直接靜默登陸url賦值給webview

2蛹稍,不是新用戶,記錄時(shí)間部服,判斷是否13分鐘之內(nèi)(比15分鐘稍微小一點(diǎn)唆姐,保留點(diǎn)余地)的二次訪問,是的話廓八,不做任何處理

3奉芦,如果超過13分鐘,那么重新獲取token剧蹂,給webview新的url

上述操作在onShow里實(shí)現(xiàn)

寫在最后

通過項(xiàng)目實(shí)踐声功,整體來(lái)講,h5內(nèi)嵌webview宠叼,還是有很多不成熟的地方先巴,微信sdk的js api提供的也比較少。

就現(xiàn)狀來(lái)說冒冬,給將要使用webview的建議就是:

如果頁(yè)面展示較多伸蚯,交互較少,可以采用該方案窄驹。

如果頁(yè)面交互復(fù)雜朝卒,目前還不建議使用該方案

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末证逻,一起剝皮案震驚了整個(gè)濱河市乐埠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌囚企,老刑警劉巖丈咐,帶你破解...
    沈念sama閱讀 206,602評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異龙宏,居然都是意外死亡棵逊,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門银酗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)辆影,“玉大人,你說我怎么就攤上這事黍特⊥芗ィ” “怎么了?”我有些...
    開封第一講書人閱讀 152,878評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵灭衷,是天一觀的道長(zhǎng)次慢。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么迫像? 我笑而不...
    開封第一講書人閱讀 55,306評(píng)論 1 279
  • 正文 為了忘掉前任劈愚,我火速辦了婚禮,結(jié)果婚禮上闻妓,老公的妹妹穿的比我還像新娘菌羽。我一直安慰自己,他們只是感情好纷闺,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評(píng)論 5 373
  • 文/花漫 我一把揭開白布算凿。 她就那樣靜靜地躺著,像睡著了一般犁功。 火紅的嫁衣襯著肌膚如雪氓轰。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,071評(píng)論 1 285
  • 那天浸卦,我揣著相機(jī)與錄音署鸡,去河邊找鬼。 笑死限嫌,一個(gè)胖子當(dāng)著我的面吹牛靴庆,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播怒医,決...
    沈念sama閱讀 38,382評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼炉抒,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了稚叹?” 一聲冷哼從身側(cè)響起焰薄,我...
    開封第一講書人閱讀 37,006評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎扒袖,沒想到半個(gè)月后塞茅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,512評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡季率,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評(píng)論 2 325
  • 正文 我和宋清朗相戀三年野瘦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片飒泻。...
    茶點(diǎn)故事閱讀 38,094評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡鞭光,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出泞遗,到底是詐尸還是另有隱情惰许,我是刑警寧澤,帶...
    沈念sama閱讀 33,732評(píng)論 4 323
  • 正文 年R本政府宣布刹孔,位于F島的核電站啡省,受9級(jí)特大地震影響娜睛,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜卦睹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評(píng)論 3 307
  • 文/蒙蒙 一畦戒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧结序,春花似錦障斋、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至返敬,卻和暖如春遂庄,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背劲赠。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工涛目, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人凛澎。 一個(gè)月前我還...
    沈念sama閱讀 45,536評(píng)論 2 354
  • 正文 我出身青樓霹肝,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親塑煎。 傳聞我的和親對(duì)象是個(gè)殘疾皇子沫换,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評(píng)論 2 345

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