2011-11-22 193 views
0

首先我对使用一些jquery插件不感兴趣。我只是想知道他们是如何实现它,所以我可以创建一个这样的脚本。历史事件 - 哈希(#)类型的URL

在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怪物可以带领我们。

+8

“我只是想知道他们是如何实现它,所以我可以创建一个这样的剧本。” - 你有没有考虑阅读jQuery插件的来源?如果某件事情没有意义,那么在SO上发布一个关于它的问题? –

回答

3

指定为hashchange事件窗口的事件处理程序,并使用setInterval旧版本浏览器轮询window.location.hash每100ms等,所以当不支持hashchange,你可以得到几乎是最新的哈希值。

我也建议编写你的链接,按钮等来调用检查鼠标上的散列的函数,以便在点击改变散列的链接时保证几乎没有延迟。

Hashchange支持的浏览器:caniuse.com

+0

这个想法有效。但这不是一个好主意。因为setInterval,我改变它会自动导航的网址。即使链接无效,它也会自动导航,因此建议不要使用此方法。 –

+0

@LeysamRosario这是所有图书馆都这样做的,这是唯一合理的方式(可能是唯一的方法)。这取决于你验证网址并按照你喜欢的方式进行操作。如果URL无效,您可以显示错误,忽略或甚至自动完成该URL。当你改变URL的时候,它不是全部的意思,它会触发处理程序?没有办法限制网址,因为用户总是可以手动更改网址。 – zatatatata

0

在IE7中发生“散列更改”时没有事件触发,在此问题中有更好的描述。

On - window.location.hash - change?

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

0

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