Google chrome 为什么Google Chrome在片段上触发onload事件会发生变化?
这让我发疯,这是HTML代码Google chrome 为什么Google Chrome在片段上触发onload事件会发生变化?,google-chrome,webkit,v8,Google Chrome,Webkit,V8,这让我发疯,这是HTML代码 <html> <head> <script> function init() { console.log("fire once"); window.onhashchange = function() { console.log(location.hash); } }
<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>
在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不会复制这个bug,所以这可能是V8 bug?Google Chrome两年来是如何处理这个bug的?最重要的是,我如何预防它
谢谢大家。不会再次触发onload事件。您将看到单击T1和T2时的输出。当您通过单击链接或后退按钮浏览同一页面时,Chrome不会刷新控制台 编辑:好吧,我可能误解了你所说的[]的意思。如果您在控制台中得到的最终输出是
fire once
#t1
#t2
fire once
#t1
#t2
#t1
fire once
#t1
#t2
#t1
<empty>
开火一次
#t1
#t2
开火一次
#t1
#t2
#t1
开火一次
#t1
#t2
#t1
然后,这似乎已经在我检查过的最新开发版本17中得到了修复(尽管它在我躺着的一个古老的Chromium 12上也可以正常工作)。我还没有检查稳定的Chrome 15
相反,如果您的意思是控制台中的最终输出只是最后五行,那么原因正如我在回答中所给出的
fire once
#t1
#t2
fire once
#t1
#t2
#t1
fire once
#t1
#t2
#t1
<empty>