header >點擊該頭部的返回標識,則會返回到上一個頁面,
//以下是mui.js中的源碼,可以看到,在點擊返回的時候,內部做了以下的操作//$.hook={}是專門用于記錄瀏覽的歷史的。$.back = function() { if (typeof $.options.beforeback === function ) { if ($.options.beforeback() === false) { return; $.doAction( backs $.doAction = function(type, callback) {//返回上一個記錄 if ($.isFunction(callback)) { //指定了callback $.each($.hooks[type], callback); } else { //未指定callback,直接執(zhí)行 $.each($.hooks[type], function(index, hook) { return !hook.handle();$.addAction = function(type, hook) {//添加歷史記錄 var hooks = $.hooks[type]; if (!hooks) { hooks = []; hook.index = hook.index || 1000; hooks.push(hook); hooks.sort(function(a, b) { return a.index - b.index; $.hooks[type] = hooks; return $.hooks[type]; };當我們把H5封裝成APP時,我們用到的5+接口存在webview這一個概念,即是一個窗口。
而剛開始我則沒有特意去區(qū)分這兩個概念,所以有時候新建窗口打開網頁,又或者有時候直接
通過網址來跳轉比如:location.href。
這樣就會導致,在監(jiān)聽手機的back按鍵時,出現(xiàn)了一種情況,其場景大致是下面這樣:
1、打開軟件進入主頁(main.html= HBuilder[webview])【前者表示URL的本地訪問路徑,后者是窗口webview的ID】。
2、通過location.href跳轉到登錄界面,而并非通過創(chuàng)建webview打開。
3、登陸后進入功能頁面,再按返回,又返回到了登錄頁面。預期是希望,我登錄完后,如果點擊手機的返回鍵,直接退出的。為此特意了解了MUI的回退函數(shù),我們可以通過復寫這個方法來實現(xiàn)
在需要監(jiān)聽的頁面:
mui.back=function(){//寫你監(jiān)聽返回鍵后需要做的操作但是,如果還是按照之前網頁跳轉和創(chuàng)建窗體兩種模式混合使用會出現(xiàn)意想不到的結果,也就是mui.back只能在入口文件被監(jiān)聽,在其他頁面或窗體做的監(jiān)聽都不會被觸發(fā),全部被入口文件的監(jiān)聽事件mui.back捕獲了,只會執(zhí)行入口文件的監(jiān)聽業(yè)務邏輯,這樣就導致了,在不自定義返回事件的時候,我們沒法避免返回上一個頁面的尷尬情況:比如回退到了登錄頁面,而自定義返回事件,發(fā)現(xiàn)所有的事件都被入口文件監(jiān)聽了。這意味著其他頁面寫mui.back=function(){}是沒有意義的。
而將所有的跳轉頁面都作為窗體打開,則不會出現(xiàn)以上問題。每個窗口都能正常監(jiān)聽mui.back自定義的function。
以上就是Html5實現(xiàn)APP中監(jiān)聽返回事件如何處理的詳細內容,其它編程語言
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。
新聞熱點
疑難解答