2017-08-02 66 views
1

之间的onload行为区别我有一些应用程序的屏幕突破,当我试图测试他们在Chrome 60在Chrome 56工作,我可以用这个例子HTML说明为什么:问题自Chrome 56和Chrome 60

<!DOCTYPE html> 
<html> 
<head> 
<script> 

function windowOnload() { 
    alert("window onload called"); 
} 

function bodyOnload() { 
    alert("body onload called"); 
} 
window.onload = windowOnload; 
</script> 
</head> 
<body onload="bodyOnload()"> 

<h1>on load test</h1> 



</body> 
</html> 

在chrome 56中,调用windowOnload和bodyOnload,在chrome 60中只调用bodyOnload。我修复了有问题的页面,但正在寻找解释为什么发生更改并在Chrome发行说明中找不到任何内容。

回答

1

这看起来像旧版本中的一个错误,它在较新版本中得到修复。这是bug report

onbluronerroronfocusonloadonresize,和onscrollWindow对象,露出的body元件上的事件处理程序,更换:

这在body元素的HTML规范规定具有通常由HTML元素支持的相同名称的通用事件处理程序。

所以当<body onload="bodyOnload()">元素被解析,它执行相当于:

window.onload = function() { 
    bodyOnload(); 
}; 

它取代了在你的Javascript设置window.onload属性。

+0

这是我的理解,但是当你的代码一直依赖于5年的错误在某些时候正确工作,它就成为一个功能。 我发现了一个简单的方法来解决它,我们没有任何用户抱怨,但我应该记录为什么我必须做出改变,并且理想情况下希望从google/chrome中指出改变它的东西。 –

+0

@SteveBauer这里是你的错误报告:https://bugs.chromium.org/p/chromium/issues/detail?id=659911对于你的文档,你也可以声明,因为它,你确实只支持一个浏览器。 – Kaiido

+0

完美,谢谢! –