历史事件 - 网址的哈希(#)类型

时间:2011-11-22 21:02:08

标签: javascript jquery ajax

首先我对使用一些jquery插件不感兴趣。我只是想知道他们是如何实现它的,所以我可以创建一个这样的脚本。

在html5历史记录中,我们使用window.onpopstate事件来检测后退/前进浏览器事件。我想要的是创建这样的东西,这样我就可以将哈希类型的url 用于其他不支持html 5的浏览器

类似的东西:

if(history.pushState){
   //use html5 history event
   window.onpopstate = function(event){that.__loadCurrentLink();};
}else{
   //use the History event for other browser
   window.historyEvent = function(event){that.__loadCurrentLink();};        
}

你们可以提供一些暗示或任何内容,以便我知道如何做到这一点。

我只是为了学习目的和其他想知道如何做到这一点的人这样做。我希望一些javascript怪物可以带领我们前进。

3 个答案:

答案 0 :(得分:3)

hashchange事件分配一个事件处理程序到窗口,并使用setInterval为旧浏览器每隔100毫秒轮询window.location.hash等,所以当不支持hashchange时,你可以得到几乎是最新的哈希。

我还建议编写你的链接,按钮等来调用检查mouseup上的哈希的函数,这样当你点击改变哈希的链接时你几乎没有延迟。

浏览器中的Hashchange支持:caniuse.com

答案 1 :(得分:0)

在IE7中发生“哈希更改”时,不会触发任何事件,在此问题中有更好的描述。

On - window.location.hash - change?

由于您对“jQuery解决方案”不感兴趣,我建议您阅读IE7最佳答案的顶部。

答案 2 :(得分:0)

许多旧版浏览器本身不支持哈希更改事件。我相信jQuery将这个功能抽象到它们的事件监听器中的方式是使用setInterval()来不断轮询散列更改。