如何清除或更改Jquery Mobile的导航历史?

前端之家收集整理的这篇文章主要介绍了如何清除或更改Jquery Mobile的导航历史?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个PhoneGap应用程序使用jQuery Mobile。
在某个页面,我无法让用户回到他访问的最后一页。

页面顺序如下:

(1)index -> (2)listing items -> (3)form submited -> (4)sucess page

我需要什么:我想要清除用户在第4页时的所有历史记录,并将页面1设置为最后一次,只有在用户尝试返回时才访问。也许这不是完全可能的,那么我会接受任何建议。

我想象,jQuery Mobile存储导航历史在某种阵列,我希望有人可以帮助找到。提前致谢!

编辑:
我使用multi-page template,这是一个单一的html页面,其中某些div作为由jQuery Mobile管理的页面

解决方法

基本上你有两个历史“锅”,你需要篡改。浏览器和JQM。

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历史中有什么,并清理你的“三重后退”

请注意,这不是一个最佳解决方案,您必须考虑很多事情(用户点击别的地方等等)。我试着永远得到这样的东西来工作在一个更复杂的设置,最终只是停止使用它,因为它从来没有工作,因为它应该。但是,为了更简单的设置,它可能会很好的工作。

猜你在找的jQuery相关文章