需求體現(xiàn):
在小程序里面,點(diǎn)擊查看用戶簽訂的協(xié)議,跳轉(zhuǎn)到協(xié)議詳情頁(yè),剛好協(xié)議詳情頁(yè)在另一個(gè)H5項(xiàng)目的已經(jīng)有,所以就想直接跳轉(zhuǎn)過(guò)去,不必再重復(fù)開發(fā)小程序版本的模塊
實(shí)現(xiàn)H5頁(yè)面跳轉(zhuǎn)
小程序里面加載H5頁(yè)面,需要嵌在web-view里面,注意:一個(gè)項(xiàng)目只能有一個(gè)。 例如:在小程序里面打開百度網(wǎng)頁(yè) 在小程序項(xiàng)目里面src/pages/新建一個(gè)webview的文件夾,含有wxml/wxss/json/js
wxml:
<web-view src="{{ src }}"></web-view>
js:在onLoad里面獲取到url這個(gè)參數(shù),然后賦值給data,這樣在wxml里面就能取到src的值。
Page({
data: {
url: '',
},
onLoad: function (param) {
this.setData({
url: decodeURIComponent(param.url),
})
}
});
json/wxss可以是空文件
在小程序的頁(yè)面跳轉(zhuǎn)到H5頁(yè)面的寫法
wx.navigateTo({
url: '../webview/index?url=https://www.baidu.com/'
});
H5頁(yè)面返回小程序
從H5頁(yè)面返回小程序頁(yè)面,需要使用微信SDK提供的跳轉(zhuǎn)方法。
window.wx.miniProgram.navigateTo({
url: `/page/account/index`,
});
使用微信的SDK方法,需要先發(fā)送簽名驗(yàn)證wx.config
小程序和H5互跳注意事項(xiàng)
1. 【問(wèn)題描述】wx.miniProgram.navigateTo中url無(wú)法跳轉(zhuǎn)問(wèn)題
【問(wèn)題解決】:App.json中配置的tabBar與wx.navigateTo中的url引用相同頁(yè)面導(dǎo)致
首先pages/account/index這個(gè)路徑在app.json已經(jīng)存在,也就是當(dāng)前從H5頁(yè)面window.wx.miniProgram.navigateTo(url)的url已經(jīng)和app.json的一樣。此時(shí)是不能通過(guò)這個(gè)方式跳轉(zhuǎn),而是要改成window.wx.miniProgram.reLaunch(url)
總結(jié):如果url在app.json已定義,則使用reLaunch跳轉(zhuǎn),如果沒(méi)有,則使用miniProgram.navigateTo(url)
2. 【問(wèn)題描述】在小程序里面跳轉(zhuǎn)到H5協(xié)議詳情頁(yè)的時(shí)候,進(jìn)入了系統(tǒng)錯(cuò)誤頁(yè)(項(xiàng)目里定義好的錯(cuò)誤頁(yè)),當(dāng)我現(xiàn)在微信公眾號(hào)打開該協(xié)議詳情頁(yè),此時(shí)再?gòu)男〕绦蜻M(jìn)入,不會(huì)出現(xiàn)。
【問(wèn)題解決】這里我判斷是跟登錄態(tài)有關(guān)系,因?yàn)槲蚁仍L問(wèn)一下公眾號(hào),此時(shí)瀏覽器里有了登錄態(tài),所以在小程序里面訪問(wèn)協(xié)議詳情頁(yè)不會(huì)進(jìn)入系統(tǒng)錯(cuò)誤頁(yè)。
定位問(wèn)題過(guò)程:H5頁(yè)面是vue頁(yè)面,先從路由文件/routes/index.js開始debugger,果然就在登錄的js里面找到問(wèn)題,查看登錄的js里面有一個(gè)先會(huì)登出的過(guò)程,然后再login(這里是因?yàn)椴煌痰脑颍枰猯ogout清除上一個(gè)券商的數(shù)據(jù),哈哈,流水賬,不然越記越長(zhǎng),不展開咯)在登錄logout的過(guò)程,此時(shí)該cgi拋出異常,剛好被全局捕獲,所以進(jìn)入了系統(tǒng)錯(cuò)誤頁(yè)。 后面的解決方法,是在登出的時(shí)候try catch捕獲異常,不要把異常被全局捕獲。
try {await request('logout.cgi')} catch(e) {console.log('error')}
問(wèn)題2, bugger經(jīng)常有,遇到了就一個(gè)個(gè)地看debugger,看錯(cuò)誤來(lái)源哪里。謹(jǐn)記。