微信小程序的組件web-view推出有一段時(shí)間了,這個(gè)組件的推出可以說(shuō)是微信小程序開(kāi)發(fā)的一個(gè)重要事件,讓微信小程序不會(huì)只束縛在微信圈子里了,打開(kāi)了一個(gè)口子,這個(gè)口子或許還比較小,但未來(lái)有無(wú)限可能。

微信小程序web-view和H5的簡(jiǎn)單思考和實(shí)踐

簡(jiǎn)單思考

1.通過(guò)web-view嵌入網(wǎng)頁(yè)功能開(kāi)放,給微信小程序的發(fā)展帶來(lái)無(wú)限的可能,有好,也有壞,但利大于弊。好處在于讓微信的開(kāi)放性更強(qiáng),無(wú)論將來(lái)混合模式和還是純H5都有更多的機(jī)會(huì)在微信這個(gè)大舞臺(tái)有表演機(jī)會(huì)。壞處可能就是也打開(kāi)了漏洞之門(mén),會(huì)有更多魚(yú)龍混雜情況出現(xiàn),這對(duì)微信的生態(tài)圈是個(gè)挑戰(zhàn)。

2.這個(gè)口子的打開(kāi),再關(guān)上的可能性就不大了,而且只能越大越開(kāi),按照微信的節(jié)奏,微信應(yīng)該有足夠把握才會(huì)開(kāi)放這個(gè)功能,一切都在微信的掌控當(dāng)中。

3.大量基于h5的網(wǎng)站或應(yīng)用都會(huì)被“小程序化”,微信這個(gè)“大”瀏覽器成為移動(dòng)互聯(lián)網(wǎng)海量流量的入口。微信搜索會(huì)不會(huì)成為移動(dòng)搜索的絕對(duì)先進(jìn)的搜索?

4.對(duì)前端工程師這個(gè)職業(yè)帶來(lái)巨大的影響,降低了開(kāi)發(fā)小程序的成本,讓前端工程師更關(guān)注網(wǎng)頁(yè)的架構(gòu),減小微信小程序的總體開(kāi)發(fā)壓力。

5.讓熱部署、熱更新更為簡(jiǎn)單,原來(lái)調(diào)整小程序風(fēng)格和布局需要重新審核和發(fā)布,這個(gè)周期有些長(zhǎng)。有了

web-view

后,基于它開(kāi)發(fā)的頁(yè)面,可以隨時(shí)改變外觀、布局、數(shù)據(jù)。

簡(jiǎn)單實(shí)踐

1.web-view里內(nèi)嵌的域名域名在小程序管理后臺(tái)設(shè)置業(yè)務(wù)域名,注意是

業(yè)務(wù)域名

,不是服務(wù)器域名。另外個(gè)人小程序目前是沒(méi)有這個(gè)設(shè)置,因此也就無(wú)法使用這個(gè)功能。

 

2.一個(gè)頁(yè)面(wml)只能放置一個(gè)web-view,且會(huì)覆蓋其他的組件鋪滿(mǎn)屏幕,這時(shí)候你就當(dāng)微信小程序是個(gè)瀏覽器好了。

3.web-view打開(kāi)的頁(yè)面必須是支持https的。

4。目前支持的jssdk接口還比較少,只支持“圖像接口”,“音頻接口”,“智能接口”,“設(shè)備信息”,“地理位置”,“搖一搖周邊”,“微信掃一掃”,“微信卡券”,“長(zhǎng)按識(shí)別”,比如獲取用戶(hù)信息,微信支付之類(lèi)都不行,我猜以后會(huì)慢慢放開(kāi),逐步達(dá)到微信公眾號(hào)的開(kāi)放程度。

5.支持iframe ,最開(kāi)始還不需要域名白名單(業(yè)務(wù)域名),后來(lái)把這個(gè)漏洞給補(bǔ)上了,不給人濫用的口子了。如果你頁(yè)面上有g(shù)oogle adsense可以要注意了,如果使用的蘋(píng)果版微信,用web-veiw打開(kāi)含有g(shù)oogle adsense就會(huì)報(bào)錯(cuò)(有的安卓偶爾也會(huì)報(bào)錯(cuò),原因不明),因?yàn)間oogle adsense會(huì)虛擬一個(gè)iframe出來(lái),google的域名自然不會(huì)在你的業(yè)務(wù)域名里,就會(huì)報(bào)錯(cuò)。

6.如果你的網(wǎng)站做了302跳轉(zhuǎn),跳轉(zhuǎn)的域名也要設(shè)置在業(yè)務(wù)域名里,別想著雞賊,能躲過(guò)這個(gè)配置。

7.通過(guò)內(nèi)嵌網(wǎng)頁(yè)的功能可以實(shí)現(xiàn)站內(nèi)鏈接的跳轉(zhuǎn),當(dāng)然不是小程序頁(yè)面的跳轉(zhuǎn),而是在小程序里打開(kāi)網(wǎng)頁(yè),雖然感覺(jué)上有些別扭,不過(guò)總算彌補(bǔ)了無(wú)法跳轉(zhuǎn)的麻煩,對(duì)資訊類(lèi)的小程序是很好的功能。

8.通過(guò)在onload里的options.url 參數(shù)可以解決分享web-view頁(yè)面加載的問(wèn)題,不過(guò)需要對(duì)options.url 通過(guò)decodeURIComponent進(jìn)行解碼,因?yàn)樵诜窒磙D(zhuǎn)發(fā)的時(shí)候,微信小程序?qū)rl的特殊字符進(jìn)行了十六進(jìn)制編碼,因此需要通過(guò)decodeURIComponent來(lái)解碼,小程序的web-view頁(yè)面才能正常加載。

9.web-veiw頁(yè)面有時(shí)候無(wú)法觸發(fā)onShareAppMessage方法,原因不明。如果有非web-view的頁(yè)面和web-view同時(shí)存在的小程序,如果是非web-view的頁(yè)面跳轉(zhuǎn)到web-view頁(yè)面,在轉(zhuǎn)發(fā)web-view頁(yè)面的時(shí)候無(wú)法觸發(fā)onShareAppMessage方法。如果有非web-view的頁(yè)面和web-view同時(shí)存在的小程序,如果是非web-view的頁(yè)面跳轉(zhuǎn)到web-view頁(yè)面,在轉(zhuǎn)發(fā)web-view頁(yè)面的時(shí)候無(wú)法觸發(fā)onShareAppMessage方法。

10.web-veiw頁(yè)面 無(wú)法使用“打開(kāi)調(diào)試”功能,如果需要看調(diào)試,需要返回上一個(gè)不使用web-view的頁(yè)面查看。

11.web-view 嵌入的網(wǎng)頁(yè)里如果有白名單以外的域名鏈接,點(diǎn)擊后會(huì)報(bào)錯(cuò)。

12.web-view不支持微信支付,但web-view內(nèi)嵌的頁(yè)面使用了公眾號(hào)授權(quán)的微信支付,是可以在內(nèi)嵌的頁(yè)面使用微信支付的。換句話(huà)說(shuō),如果如果用web-view內(nèi)嵌公眾號(hào)的h5頁(yè)面,利用JSSDK是可以使用微信支付的。