基本上你有两个需要篡改的历史“罐子”。浏览器和 JQM。
JQM urlHistory
您可以很容易地修改 JQM 的 urlHistory。从 JQM 代码:
urlHistory = {
// Array of pages that are visited during a single page load.
// Each has a url and optional transition, title, and pageUrl
// (which represents the file path, in cases where URL is obscured, such as dialogs)
stack: [],
// maintain an index number for the active page in the stack
activeIndex: 0,
// get active
getActive: function () {
return urlHistory.stack[urlHistory.activeIndex];
},
getPrev: function () {
return urlHistory.stack[urlHistory.activeIndex - 1];
},
getNext: function () {
return urlHistory.stack[urlHistory.activeIndex + 1];
},
// addNew is used whenever a new page is added
addNew: function (url, transition, title, pageUrl, role) {
// if there's forward history, wipe it
if (urlHistory.getNext()) {
urlHistory.clearForward();
}
urlHistory.stack.push({
url: url,
transition: transition,
title: title,
pageUrl: pageUrl,
role: role
});
urlHistory.activeIndex = urlHistory.stack.length - 1;
},
//wipe urls ahead of active index
clearForward: function () {
urlHistory.stack = urlHistory.stack.slice(0, urlHistory.activeIndex + 1);
}
};
所以上面所有的函数都是可用的,可以像这样调用,例如:
$.mobile.urlHistory.clearForward();
要监视您的历史记录,请将其放在某处并监听 pageChange(一旦转换完成)以查看 urlHistory 中的内容:
$(document).on('pagechange', 'div:jqmData(role="page")', function(){
console.log($.mobile.urlHistory.stack);
});
从那里您可以开始查看历史记录中的内容并根据需要进行清理。
我在自己的导航层中经常使用它来修改 urlHistory 中存储的内容以及不应该存储的内容。与浏览器同步是困难的部分......
在与浏览器同步时:
在我的导航层中,我只从 urlHistory 中删除了两个条目,因此当您单击浏览器后退按钮时,总会有一个页面可以访问(而不是两个)。在您的情况下,您可能会在浏览器历史记录中有 4 个条目,但如果您从 JQM urlHistory 中删除 2 个条目,则单击后退按钮时您将有两个“不能访问”的页面。因此,如果您的浏览器历史记录如下所示:
www.google.com
www.somePage.com
www.YOUR_APP.com = page1
page2
page3
page4
并且您删除page2和page3,单击后退按钮应导致:
1st back-click = page4 > page1
2nd back-click = page1 > www.somePage.com [because you removed page3]
3rd back-click = www.somePage.com > www.google.com [because you removed page2]
理论上的解决方法是:
- 记下你进入页面的“深度”
- 从 JQM urlHistory 中删除页面并获得“跳转”值 = counter-removedPages
- 在下一个浏览器后退单击时,跳转 x window.history(back) 并且只让一个 JQM 转换通过。您的 url 将一步展开 page4>page3>page2>page1 并且您只允许 JQM 进行从 page4 到 page1 的一次转换
- 检查 urlHistory 中的内容并在“三重返回”之后进行清理
请注意,这不是最佳解决方案,您必须考虑很多事情(用户在返回之前点击其他地方等)。我一直试图让这样的东西在更复杂的设置中工作,最终只是停止使用它,因为它从来没有按应有的方式工作。但是对于更简单的设置,它可能会很好地工作。