我参加聚会有点晚了,但我最近有同样的要求,我想分享一下我是如何做到的。因此,我将原始问题中的要求扩展到Panels、Popups 和Pages:
...预期的“类似应用程序”的行为,历史回溯 > 关闭
什么都开。就是这样。
在.on("panelopen")、.on("popupafteropen") 和.on("pagecontainershow") 中,我只需使用 HTML5 API (https://developer.mozilla.org/en-US/docs/Web/API/History_API) 将另一个条目添加到窗口历史记录中(我相信没有必要使用 JQM 导航浏览器怪癖那):
window.history.pushState({}, window.document.title, window.location.href);
之后,我或多或少地使用 Omar 的函数来拦截popstate 事件:
$(window).on("popstate", function (e) {
var pageId = $(":mobile-pagecontainer").pagecontainer("getActivePage").prop("id");
var pageOpen = (pageId != "page-home");
var panelOpen = $(".ui-panel-open").length > 0;
var popupOpen = $(".ui-popup-active").length > 0;
if(pageOpen) {
$.mobile.pageContainer.pagecontainer("change", "#page-home", {reverse: true});
return false;
}
if(panelOpen) {
$(".ui-panel-open").panel("close");
return false;
}
if(popupOpen) {
$(".ui-popup-active .ui-popup").popup("close")
return false;
}
});
如您所见,这只是主页的一层,但这可以通过使用 JQM 历史实现轻松扩展以获取上一页:
var activeId = $.mobile.navigate.history.activeIndex;
var jqmHistory = $.mobile.navigate.history.stack; // array of pages
并使用pagecontainer 更改为活动条目 - 1。
最后一点,通过完全禁用内置的 JQM Ajax 导航系统也可以很好地工作:
/* Completely disable navigation for mobile app */
$.mobile.ajaxEnabled = false;
$.mobile.loadingMessage = false;
$.mobile.pushStateEnabled = false;
$.mobile.hashListeningEnabled = false;
$.mobile.changePage.defaults.changeHash = false;
$.mobile.popup.prototype.options.history = false;
(在浏览器中测试,在真实的 Android 和 iOS 设备上)