在某个页面,我无法让用户回到他访问的最后一页。
页面顺序如下:
(1)index -> (2)listing items -> (3)form submited -> (4)sucess page
我需要什么:我想要清除用户在第4页时的所有历史记录,并将页面1设置为最后一次,只有在用户尝试返回时才访问。也许这不是完全可能的,那么我会接受任何建议。
我想象,jQuery Mobile存储导航历史在某种阵列,我希望有人可以帮助找到。提前致谢!
编辑:
我使用multi-page template,这是一个单一的html页面,其中某些div作为由jQuery Mobile管理的页面。
解决方法
JQM url历史
你可以很容易地修改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,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中删除页面并获取一个“jump”值= counter-removedPages
>在下一个浏览器上点击,做跳转x window.history(返回),只让一个JQM转换通过。您的URL将在一步中解开page4> page3> page2> page1,您只允许JQM从第4页到第1页进行单个转换
检查url历史中有什么,并清理你的“三重后退”
请注意,这不是一个最佳解决方案,您必须考虑很多事情(用户点击别的地方等等)。我试着永远得到这样的东西来工作在一个更复杂的设置,最终只是停止使用它,因为它从来没有工作,因为它应该。但是,为了更简单的设置,它可能会很好的工作。