javascript - 动态文档对象模型 (DOM) 的后退按钮(历史记录)

标签 javascript jquery html cordova browser-history

我正在制作一个与 Cordova/Phonegap 一起使用的小型 Web 应用程序,因此我需要可以在任何 WebView 中实现的解决方案(主要是 Android 和 iOS,但也有一些 BlackBerry OS 10)...

我用 JavaScript 动态更改 DOM,当我尝试返回“上一页”时出现问题,我使用了几种方法,例如:

if (typeof (navigator.app) !== "undefined")
{
    navigator.app.backHistory();
}
else
{
    window.history.back();
}

此解决方案适用于第一个“页面”,它们随哈希值更改,但在某些时候我不会更改哈希值,而只会更改 DOM,然后通过单击后退按钮,它会远远落后。

另一件事是,我尝试使用jquery clone();克隆“上一页”,但是这样,我只能后退一步,我需要一些东西来保留所有内容(历史记录)内存中。

你建议我做什么? 有没有不严格使用 HTML5 的插件? (因为较旧的 WebVies Android 和 iOS 不支持某些功能)。

感谢您的阅读,请原谅我糟糕的英语。

最佳答案

使用 jQuery 的 clone() 并将结果推送到数组中也许是您可以使用的解决方案。当用户“导航”您的应用程序时,您将捕获作为“页面”父级的特定 DOM 节点,并在整个应用程序中保持静态。

 <html>
  <head>
  <title>Your App</title> 
  <script></script>
  </head>
  <body>
    <header>Your header here</header>
    <div id='container'>
          <-- the content you want to save in history here  -->
    </div>
    <footer>Your footer here</footer>

使用像这样的简单脚本:

  var navHistory = []

  function appHistory(){
     var cloned = $('#container').clone();
     navHistory.push(cloned);
 }

每当用户在您的应用中“导航”时,您都可以调用 appHistory 函数,将相关 DOM 元素复制并推送到 navHistory 数组中。

要检索“页面”内容,只需访问相关数组条目并删除/替换父容器的当前子容器即可:

 function navBackOne(){
     //assuming you write the contents of the last page only when you
     //navigate away from it...
     var i = navHistory.length - 1;
     $('#container').children().remove()
     $(navHistory[i]).appendTo('#container')
     navHistory.pop();  
 }

关于javascript - 动态文档对象模型 (DOM) 的后退按钮(历史记录),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31949226/

相关文章:

javascript - knockout 字符串格式模式

javascript - 在文本/链接内容旁边放置图像

javascript - 通过了解内部 div 的大小来设置 html 页面最大宽度

jquery - ASP.Net MVC 4 bundle

html - 如何对 iPad 上的网站进行故障排除?

javascript - JavaScript 可以检测到用户何时停止加载文档吗?

jquery - 在 Canvas 顶部制作交互式文本区域

jquery - 使用CSS变换滚动时如何旋转图像?

html - 如何在不破坏导航栏设计的情况下使此导航栏与横幅重叠,并且在滚动时导航栏必须跟随?

javascript - 非图像 div 上的无限垂直滚动