【发布时间】:2010-09-13 07:26:27
【问题描述】:
当只有位置哈希发生变化时,有没有办法在 javascript 中响应被点击的后退按钮(或按下退格键)?也就是说当浏览器没有与服务器通信或重新加载页面时。
【问题讨论】:
标签: javascript
当只有位置哈希发生变化时,有没有办法在 javascript 中响应被点击的后退按钮(或按下退格键)?也就是说当浏览器没有与服务器通信或重新加载页面时。
【问题讨论】:
标签: javascript
使用hashchange 事件:
window.addEventListener("hashchange", function(e) {
// ...
})
如果您需要支持旧版浏览器,请查看 Modernizr 的 HTML5 Cross Browser Polyfills wiki 页面中的 hashChange Event section。
【讨论】:
查看history.js。有一个html 5 statechange事件,你可以听一下。
【讨论】:
我做了一个有趣的 hack 来解决这个问题,让我很满意。我有一个动态加载内容的 AJAX 站点,然后修改 window.location.hash,并且我有代码在 $(document).ready() 上运行以解析哈希并加载适当的部分。问题是我对用于导航的部分加载代码非常满意,但想添加一种方法来拦截浏览器的后退和前进按钮,这会改变窗口位置,但不会干扰我当前操作的页面加载例程window.location,并且以恒定的时间间隔轮询 window.location 是不可能的。
我最终做的是这样创建一个对象:
var pageload = {
ignorehashchange: false,
loadUrl: function(){
if (pageload.ignorehashchange == false){
//code to parse window.location.hash and load content
};
}
};
然后,我在我的站点脚本中添加了一行以在 hashchange 事件上运行 pageload.loadUrl 函数,如下所示:
window.addEventListener("hashchange", pageload.loadUrl, false);
然后,每当我想修改 window.location.hash 而不触发此页面加载例程时,我只需在每个 window.location.hash = 行之前添加以下行:
pageload.ignorehashchange = true;
然后是每个哈希修改行之后的以下行:
setTimeout(function(){pageload.ignorehashchange = false;}, 100);
所以现在我的部分加载例程通常正在运行,但是如果用户点击“后退”或“前进”按钮,则会解析新位置并加载相应的部分。
【讨论】:
我创建了一个solution,它可能对某些人有用。只需将代码包含在您的页面上,您就可以编写自己的函数,当单击返回按钮时将调用该函数。
我已经在 IE、FF、Chrome 和 Safari 中进行了测试,并且都可以正常工作。我的解决方案是基于 iframe 工作的,不需要持续轮询,在 IE 和 FF 中,但是由于其他浏览器的限制,在 Safari 中使用位置哈希。
【讨论】:
【讨论】:
onLocationChange 也可能有用。不确定这是否是 Mozilla 独有的东西,但似乎它可能是。
【讨论】: