Jquery - 告诉哈希何时更改?

时间:2009-09-02 18:02:51

标签: javascript jquery fragment-identifier

我正在尝试让我的网站正确回复后退按钮。我已经保存了我想要它做的哈希,但我不知道jQuery的钩子能够告诉哈希值何时发生变化。它不是.ready(),因为页面没有重新加载。我该用什么?

稍微编辑一下:

我正在使用iframe,所以当有人点击链接时我无法分辨。它位于相同的子域中,因此我能够看到它的文件路径,并保存它以便您可以添加书签。不幸的是,通过将其保存为哈希,我的后退按钮现在无法重新加载,无法重新加载iframe,因此我的后退按钮基本上已损坏。如果有办法告诉URI何时发生变化,我可以根据iframe地址进行检查,如果不匹配则更改它。

我需要的是检查URI是否已更改的方法。是否有URI的.change()?沿着这条路线的东西?

5 个答案:

答案 0 :(得分:4)

您可以尝试History Event插件。

答案 1 :(得分:3)

文档准备好后,检查哈希并适当地更改页面。

  

我不知道jQuery的钩子能够告诉哈希何时更改

您可以截取哈希锚点击事件并进行适当响应,而不是等待“哈希已更改”事件(不存在)。

有些方法通过检查计时器上的window.location.hash来创建“哈希已更改”事件。

答案 2 :(得分:2)

Ben'the cowboy'Alman为哈希变化编写了一个跨平台插件

http://benalman.com/news/2010/07/jquery-hashchange-event-v13/

我不知道你是否在iframe中使用它或者是什么,但如果你在iframe之外使用它就会像

$(function(){
    $(window).hashchange(function(){
       //Insert event to be triggered on has change.
       changeIframeContent(window.location.hash);
    })
})

答案 3 :(得分:1)

你应该看一下Ben Nadel的solution,它是绑定事件到非DOM对象。

答案 4 :(得分:0)

没有内置的方法来监视哈希更改,在firefox中你可以使用watch方法,但据我所知它不是默认的,所以你可以破解它写的东西(见下文)

function setWatchHashChanges(functionObject)
{
    if(window.location.watch)
    {
        window.location.watch('hash', function(e){functionObject(e);return e;});
    } else {
        if(!setWatchHasnChanges.hash)
        {
            setWatchHasnChanges.hash = window.locaton.hash;
        } else {
            setInterval(function(){
            if(setWatchHasnChanges.hash!== window.locaton.hash)
            {
                setWatchHasnChanges.hash = window.locaton.hash;
                functionObject(setWatchHasnChanges.hash);
            }
        }, 100);
    }
}