Javascript Safari 4中的location.hash奇怪之处

Javascript Safari 4中的location.hash奇怪之处,javascript,safari,Javascript,Safari,在Safari 4中,location.hash似乎完全被破坏了:它可以在最初设置,但据我所知,不能在任何事件中设置,无论该事件是由用户操作还是计时器触发的 下面是一个示例(为了简洁起见,我在这里使用jQuery,但我无法想象这个问题是jQuery特有的): 单击下面的链接将此文本加粗。 $(文档).ready(函数(){ location.hash='#normal';//这适用于所有浏览器 $('a')。单击(函数(){ $(#test').css({'font-weight':'bo

在Safari 4中,location.hash似乎完全被破坏了:它可以在最初设置,但据我所知,不能在任何事件中设置,无论该事件是由用户操作还是计时器触发的

下面是一个示例(为了简洁起见,我在这里使用jQuery,但我无法想象这个问题是jQuery特有的):


单击下面的链接将此文本加粗。

$(文档).ready(函数(){ location.hash='#normal';//这适用于所有浏览器 $('a')。单击(函数(){ $(#test').css({'font-weight':'bold'}); location.hash='#bold';//这在Safari 4中失败 return false;//防止链接href影响哈希 }); setInterval(函数(){ 如果(!location.hash.match('bold$')){ $(#test').css({'font-weight':'normal'}); } $('#hashValue').html(location.hash); }, 100); });
在Firefox中,这种行为是您所期望的:当您加载页面时,哈希设置为#normal。单击链接时,文本变为粗体,哈希值设置为
#bold
。由于哈希已更改,因此间隔函数无效。如果您将地址栏中的哈希值更改为其他内容(不以
粗体
结尾),则文本将取消粗体。这使得“后退”按钮可以直观地工作:单击“后退”到哈希为“粗体”的位置,文本将变为粗体。单击其他位置,文本将取消粗体显示

但在Safari4中,行为是:加载页面时,哈希值设置为#normal。然后就地址栏而言,它将永远保持这种状态。当您单击链接时,文本将变为粗体,并将保持这种方式,即使地址栏中的哈希值没有更改。因此,location.hash在内部发生了更改(正如
hashValue
段落所反映的那样)。这种与地址栏的不一致会带来可怕的后果:如果单击“后退”按钮,文本将不加粗;但是如果你在那之后点击前进按钮,它不会被重新加粗!这完全破坏了JavaScript历史库,例如


有办法吗?有解决办法吗?我在Mac上的Safari 4.0.1中对此进行了测试。

您能改为这样做吗

window.location.replace(new_location);

你能改成这样吗

window.location.replace(new_location);

事实证明,这根本不是Safari中的bug,而是我使用的一个插件Glims中的bug:

删除插件修复了这个问题。我不认为这是一种可能性,因为我不知道为什么Glims会弄乱JavaScript与地址栏的交互。
重新安装最新版本后,它似乎没有遇到此问题。

事实证明,这根本不是Safari中的错误,而是我使用的一个插件Glims中的错误:

删除插件修复了这个问题。我不认为这是一种可能性,因为我不知道为什么Glims会弄乱JavaScript与地址栏的交互。 重新安装最新版本后,它似乎没有遇到此问题。

对我来说很有效(Safari 4.0.1 Mac)。你想发布一个链接到一个不起作用的版本吗?对我来说很有效(Safari 4.0.1 Mac)。你想发布一个链接到一个不起作用的版本吗?