2018-6-15 更新
文中方法屬于黑科技鸣个,原理在于利用小程序api后退到上一頁面,而再后退就沒有歷史了布朦,進(jìn)而退出程序囤萤;
但是最近小程序應(yīng)該更新了api中的bug,此方法以及不能使用是趴,后退時如果沒有歷史了涛舍,就會退到首頁,不會退出程序唆途,如官方文檔中所述的富雅,但是為什么之前會退出,我想那是個bug吧窘哈。
問題出現(xiàn)
<web-view>組件是微信小程序1.6.4版本開始支持的功能吹榴,用以承載網(wǎng)頁的容器,會自動鋪滿整個小程序頁面滚婉。但是個人類型與海外類型的小程序暫不支持使用图筹。
我所在的項目為了在小程序上開辟渠道,新建了一個小程序让腹,這個小程序只有一個頁面远剩,頁面中的代碼很簡單,就是一個<web-view>組件骇窍,將其src設(shè)置為原有的h5站點瓜晤;
小程序是可以正常跑起來,可以使用h5的原有功能腹纳,但是卻遇到了一個尷尬點——在ios系統(tǒng)中痢掠,小程序頁面左上角沒有返回按鈕;
你可能在納悶嘲恍,我們項目也用了<web-view>組件啊足画,我們的怎么就有呢?
其實出現(xiàn)這個情況佃牛,需要滿足這個條件:
- 小程序首頁就是包含<web-view>組件的頁面
如果小程序只有一個頁面淹辞,那它的左上角是沒有返回按鈕的(ios系統(tǒng)下),退出小程序只能從右上角的“圓圈”按鈕退出俘侠,安卓系統(tǒng)也可以通過手機(jī)的返回按鈕退出象缀。
如果小程序存在多個頁面蔬将,互相之間發(fā)生過跳轉(zhuǎn),那左上角是有返回按鈕的(ios系統(tǒng)下)央星,你們的項目中有返回按鈕霞怀,就是因為發(fā)生過跳轉(zhuǎn),承載<web-view>組件的頁面一定不是小程序首頁等曼。
解決策略
分析其原因里烦,其實就是無歷史跳轉(zhuǎn),只有一個頁面禁谦,解決方式也很簡單胁黑,就是加一個空頁面作為首頁,當(dāng)進(jìn)入首頁時州泊,馬上跳轉(zhuǎn)到<web-view>頁丧蘸;
但是代碼上要做些處理,不能讓它總跳轉(zhuǎn)遥皂,當(dāng)用戶從<web-view>后退時力喷,應(yīng)該退出小程序;
//app.js代碼
App({
onHide() {
this.data.webShowed = false;
},
data: {
webShowed: false //標(biāo)記web-view頁面是否已經(jīng)顯示過了
}
});
<!--首頁wxml代碼-->
無
//首頁js代碼
var app = getApp();
Page({
onShow() {
//如果已經(jīng)顯示過web-view頁了演训,則執(zhí)行后退操作弟孟,否則就跳到web-view頁
if (!app.data.webShowed) {
wx.navigateTo({
url: '/pages/web-view/web-view'
})
} else {
wx.navigateBack({
delta: 1
});
}
}
})
<!--web-view 頁面wxml代碼-->
<web-view src="url"></web-view>
//web-view 頁面js代碼
Page({
onShow() {
var app = getApp();
app.data.webShowed = true;//標(biāo)記已經(jīng)顯示過web-view頁了
}
})
上述代碼可以解決小程序左上角無返回按鈕的問題;
還有問題
但是問題只解決了一半样悟,你可以嘗試一個操作:
- 打開小程序后拂募,觸發(fā)頁面中的【轉(zhuǎn)發(fā)】操作,將小程序轉(zhuǎn)發(fā)給任意微信聯(lián)系人窟她,轉(zhuǎn)發(fā)成功后陈症,點擊微信轉(zhuǎn)發(fā)消息會重新打開小程序;此時你會發(fā)現(xiàn)震糖,誒B伎稀!返回按鈕怎么有沒有了吊说?B塾健!
這個問題跟小程序的轉(zhuǎn)發(fā)有關(guān)系颁井,因為我們小程序只有兩個頁面:首頁厅贪,web-view頁,用戶觸發(fā)轉(zhuǎn)發(fā)只可能在web-view頁(因為首頁進(jìn)入就會跳轉(zhuǎn)或者后退蚤蔓,無法呈現(xiàn)在用戶面前),轉(zhuǎn)發(fā)出去時糊余,會拿當(dāng)前頁面地址作為打開地址秀又,故點擊微信轉(zhuǎn)發(fā)消息后會進(jìn)入web-view頁单寂,而非首頁;
沒有進(jìn)首頁吐辙,直接進(jìn)入了web-view頁宣决,也就等同于web-view頁就是首頁了,問題又回到最上面的情況了昏苏,所以尊沸,解決方法就是配置轉(zhuǎn)發(fā)設(shè)置,讓轉(zhuǎn)發(fā)出去的頁面地址是首頁即可贤惯;
//web-view頁 js代碼
Page({
data: {
src: ''
},
onShow() {
wx.showShareMenu({
withShareTicket: true
})
app.data.webShowed = true;
},
onShareAppMessage() {
return {
title: '分享標(biāo)題',
path: '/pages/index/index' // 分享出去后打開的頁面地址
}
}
})