gpt4 book ai didi

javascript - Safari 4 中的 location.hash 奇怪之处

转载 作者:行者123 更新时间:2023-11-28 03:00:49 25 4
gpt4 key购买 nike

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

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

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<!-- Include jQuery -->
</head>
<body>
<div id="test">Click the link below to make this text bold.</div>
<p><a href="#test">Bold it!</a></p>
<p id="hashValue"></p>
<script>
$(document).ready(function() {
location.hash = '#normal'; // this works in all browsers
$('a').click(function() {
$('#test').css({'font-weight': 'bold'});
location.hash = '#bold'; // this fails in Safari 4
return false; // prevents link href from affecting hash
});
setInterval(function() {
if (! location.hash.match('bold$')) {
$('#test').css({'font-weight': 'normal'});
}
$('#hashValue').html(location.hash);
}, 100);
});
</script>
</body>
</html>

在 Firefox 中,行为正如您所期望的那样:加载页面时,哈希值设置为#normal。单击链接时,文本会变为粗体,并且哈希值将设置为 #bold。由于哈希已更改,因此间隔函数不起作用。如果您将地址栏中的哈希值更改为其他内容(不以粗体结尾),则文本将变为非粗体。这让后退按钮可以直观地工作:单击返回到哈希值 #bold 的位置,文本就会变为粗体。单击其他任意位置,文本将变为非粗体。

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

有什么修复吗?有什么解决方法吗?我在 Mac 上的 Safari 4.0.1 中对此进行了测试。

最佳答案

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

删除插件解决了问题。我不认为这是一种可能性,因为我不知道为什么 Glims 会扰乱 JavaScript 与地址栏的交互。

重新安装最新版本,似乎没有遇到这个问题。

关于javascript - Safari 4 中的 location.hash 奇怪之处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1030018/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com