【问题标题】:How to remove current page from Jquery Mobile history?如何从 Jquery Mobile 历史记录中删除当前页面?
【发布时间】:2014-08-28 14:52:07
【问题描述】:

有没有办法从 Jquery Mobile 历史记录中删除当前页面(导航离开的页面)?设置 changeHash:false 似乎会从历史记录中删除传入页面。

这是一个例子:

第 1 页

<div data-role="page">
  <div data-id="fixedheader" data-role="header" data-position="fixed">
    <h1>Page 1</h1>
  </div>
  <div data-role="content">
    <button onclick="$.mobile.changePage('page2.html',{changeHash:false});">Page 2</button>
  </div>
</div>

第 2 页

<div data-role="page">
  <div data-id="fixedheader" data-role="header" data-position="fixed">
    <h1>Page 2</h1>
  </div>
  <div data-role="content">
    <button onclick="$.mobile.changePage('page3.html',{changeHash:true});">Page 3</button>
  </div>
</div>

第 3 页

<div data-role="page">
  <div data-id="fixedheader" data-role="header" data-position="fixed" data-add-back-btn="true">
    <h1>Page 3</h1>
  </div>
  <div data-role="content"></div>
</div>

我想要的是,当在第 3 页时,单击后退按钮会转到第 2 页,并且无法返回到第 1 页。

从第 1 页点击到第 2 页再到第 3 页,在第 3 页上的后退按钮直接返回到第 1 页。

此外,如果我将 data-add-back-btn="true" 放在第 2 页上,它会显示一个后退按钮,但单击它什么也不做。

【问题讨论】:

  • 不确定为什么它不起作用,因为我通常使用点击返回,但是尝试将 (data-url="page2.html") 添加到标题中,看看是否有效。或者只需添加 (onclick="$.mobile.changePage('page2.html',{changeHash:true});") 并删除 (data-add-back-btn="true")
  • 硬编码此示例中的按钮以转到第 2 页会使其转到第 2 页,但这不是解决方案。在一个真实的应用程序中,有 1 到 3 之间的任意数量的路径,它需要使用历史记录才能转到正确的页面。这也不是真正的后退,而是从第 3 页前进到第 2 页。在 Android 上,人们也可以使用后退按钮来浏览历史记录,这不会改变。
  • 您想从历史记录中删除哪个页面?第 1 页还是第 2 页?
  • 我希望流程点击 1 到 2 到 3。然后在 3 上时,后退按钮返回到 2。2 显示没有后退按钮,因为 1 不在历史记录中。
  • 简单的选项是添加data-ajax="false"到首页的page2.html链接。例如&lt;a href="page2.html" data-ajax="false" class="ui-btn"&gt;Page 2&lt;/a&gt;.

标签: jquery-mobile browser-history


【解决方案1】:

假设您使用的是jQuery Mobile > 1.4,您可以直接使用$.mobile.navigate.history.stack访问和修改历史堆栈

如果您只想在从第 1 页 -> 第 2 页导航时从历史记录中删除第 1 页,则以下代码应该可以解决您的问题。此函数假定 jQuery Mobile 1.4.3

$(document).on('pagecontainerchange', function(e, ui) {
      if ( ui.prevPage.attr('id') === 'first' && ui.toPage.attr('id')  === 'second' ) {
          var index = $.mobile.navigate.history.stack.length - 2;
          $.mobile.navigate.history.stack.splice(index, 1);
    }
});

Here is a fiddle 记录历史堆栈的状态

【讨论】:

  • 我必须检查一下。目前转移到其他一些事情上。感谢您的提示。
  • 你好!这最终对我有用,但只有在我添加了另一行之后:>>>> 不知道为什么,只知道没有这个它会记录这个错误:'cannot read property hash of undefined'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-21
  • 1970-01-01
  • 1970-01-01
  • 2012-10-26
  • 2010-09-22
  • 2019-08-06
相关资源
最近更新 更多