这让我感到疯狂,这是HTML代码。
<html>
<head>
<script>
function init() {
console.log("fire once");
window.onhashchange = function() {
console.log(location.hash);
}
}
</script>
</head>
<body onload="init();">
<a href="#t1">T1</a>
<a href="#t2">T2</a>
</body>
</html>
重现错误的步骤(我相信错误),打开控制台,单击T1,单击T2,单击返回,单击返回...在Firefox上这是控制台输出(我在[]中添加了鼠标操作。)
[load]
fire once
[click T1]
#t1
[click T2]
#t2
[click back]
#t1
[click back]
(an empty string)
在Google Chrome 14.0.835.202上(在Ubuntu和Windows XP上测试过),这是输出。
[load]
fire once
[click T1]
#t1
[click T2]
#t2
[click back]
fire once
#t1
#t2
#t1
[click back]
fire once
#t1
#t2
#t1
(an empty line)
Safari不会重现此错误,所以这可能是V8错误?谷歌Chrome是如何经历两年这个错误的?最重要的是我该如何预防?
谢谢大家。
答案 0 :(得分:1)
不会再次触发onload事件。你看到点击T1和T2时的输出。当您通过单击#links或后退按钮导航同一页面时,Chrome不会刷新控制台。
编辑:好的,我可能误解了[]的含义。如果您在控制台中获得的 final 输出是fire once
#t1
#t2
fire once
#t1
#t2
#t1
fire once
#t1
#t2
#t1
<empty>
然后这似乎已在我检查的最新Dev版本17中得到修复(尽管它也适用于我躺在的古老的Chromium 12)。我没有检查稳定的Chrome 15。
如果相反,你的意思是控制台中的最终输出只是其中的最后五行,那么原因就像我给出的答案一样。