問題描述1:
微信開發的時候,在公眾號菜單中打開一個H5頁面(如:個人中心),在這個頁面上的一些操作,經過多次跳轉后,點擊左上角的返回按鈕,發現會原封不動的返回至上一級頁面。
即 公眾號菜單->A->B->C,點擊返回后,返回了B(且無刷新),目的是要在C直接跳轉至A(公眾號菜單->A->B->C,C->A),雖然可以在C上添加按鈕之類的操作進行跳轉(公眾號菜單->A->B->C->A),但當點擊左上角返回按鈕后,依然是會返回C頁面,並且,也無法確保用戶不去點擊左上角的返回按鈕。
解決方式:
在C頁面中添加如下javascript代碼:
$(function(){
pushHistory(); window.addEventListener("popstate", function(e) {
//回調函數中實現需要的功能 alert("我監聽到了瀏覽器的返回按鈕事件啦");
location.href='你要跳轉的鏈接';//在這里指定其返回的地址
}, false);
});
function pushHistory() {
var state = { title: "title", url: "__SELF__" };
window.history.pushState(state, state.title, state.url);
}
問題描述2:
以上,解決了返回按鈕的監聽與控制,但是又出現了新的問題,即當從C->A后,點擊返回按鈕,依然會返回C頁面,目的是在A頁面點擊返回則關閉網頁返回至公眾號對話頁面。
在A頁面中添加如下javascript代碼:
$(function(){
pushHistory();
window.addEventListener("popstate", function(e) {
// 新版中使用wx.closeWindow()方法
WeixinJSBridge.call('closeWindow'); }, false); });
function pushHistory() {
var state = { title: "myCenter", url: "__SELF__" };
window.history.pushState(state, state.title, state.url);
}
問題描述3:
在微信中進入頁面就觸發了popstate事件。然后頁面會處於一直刷新狀態。
解決方式:
定義boolean 變量bool=false。在頁面加載后,采用setTimeout方法設置1.5s的超時,在超時執行方法中設置bool=true。
在popstate監聽當中增加對bool的判斷,當bool=true時,執行內容。
代碼如下:
$(function(){
pushHistory();
var bool=false;
setTimeout(function(){ bool=true; },1500);
window.addEventListener("popstate", function(e) {
if(bool){
alert("我監聽到了瀏覽器的返回按鈕事件啦");
}
}, false); });