javascript - 我可以阻止 history.popstate 在初始页面加载时触发吗?

标签 javascript jquery history getscript popstate

我正在开发一个通过 AJAX 提供内容的网站。

如果您单击菜单中的一个项目,内容 div 会更新为 $.get 响应,没什么特别的。

我正在实现 history.pushState 以允许使用浏览器的后退/前进按钮进行导航。

我有以下内容可以在历史导航中加载内容:

$(function() {
    $(window).bind("popstate", function() {
        $.getScript(location.href); 
    });
});

问题是,当第一次加载页面时,此函数会执行 $.getScript 因此会立即再次加载页面。第一次加载页面时,它呈现初始 HTML View ,然后在第二次加载时呈现 JS View ,因为它是 JS 请求。

如何防止此事件在包含 HTML 请求的页面上触发?

最佳答案

使用 native HTML5 History API 您会遇到一些问题,每个 HTML5 浏览器处理 API 的方式都略有不同,因此您不能只编写一次代码就期望它在不实现解决方法的情况下工作。 History.js为 HTML5 History API 提供了一个跨浏览器的 API,如果您想沿着这条路线走下去,则为 HTML4 浏览器提供一个可选的 hashchange 回退。

要将您的网站升级为 RIA/Ajax 应用程序,您可以使用以下代码片段: https://github.com/browserstate/ajaxify

这是较长文章的一部分 Intelligent State Handling其中对 hashbang、hashes 和 html5 history api 进行了解释。

如果您需要任何进一步的帮助,请告诉我 :) 干杯。

关于javascript - 我可以阻止 history.popstate 在初始页面加载时触发吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5210034/

相关文章:

javascript - 用unicode字符提取字符串中的单词

javascript - 内存与重复的 promise

javascript - 表单 - 停止双重提交

Clojure : 'lein repl' history grepping?

history - 为什么编程语言最初使用 "&&"而不是 "and"?

javascript - 解析完整的json文件 typescript

javascript - CRUD AngularJS 应用程序的撤消/重做实现

string - 字符串转义码 (\n,\t...) 起源于何处?

javascript - AngularJS - 显示和隐藏带有 glyphicon 的箭头图标

javascript - 无法使用 off() 来关闭带有动态列表 (jquery) 事件处理程序的事件处理程序?