更新到Chrome v71后,我发现一个锚标记的作用域存在奇怪的行为,该锚标记的内部包含img标签,如下所示:
<a href="#none" onclick="debugger;complete();">
<img src="https://clickmeuk.net/wp-content/uploads/2016/04/click-me-logo2x.png"/>
</a>
...
function complete() {
alert("haha");
}
在Chrome上,直到v71和其他浏览器,单击img将触发onclick事件,并显示警报。但是自最新更新以来,相同的代码导致调用以下错误:
Uncaught TypeError: complete is not a function at HTMLAnchorElement.onclick (index.html:6)
之所以发生这种情况,是因为在Chrome v71上,定位标记的onclick范围在达到全局范围之前先达到,因此引用了img节点的complete
字段,而不是{ {1}}功能。在此pen中可重现。
complete()
是<img>
的子节点,因此在触发onclick时,引用<a>
的范围似乎很奇怪。当然,您可以通过简单地将函数名称更改为<img>
以外的名称来修复它。但我不知道是什么原因导致了更改。 Chrome v70或Explorer或Safari可以正常工作。这可能是错误吗?还是我错过了某些其他浏览器尚未实现的更新?
答案 0 :(得分:1)
在测试用例上运行bisect会显示更改是在this ChangeLog中进行的。
从此提交列表中,Create new EventHandler and base class for EventListener/EventHandler by Yuki Yamada似乎是该领域行为改变的最可能原因。
阅读提交说明和链接的问题664676和759461,没有什么可以让我们认为这是预期的更改。
Chrome浏览器使用的EventTarget的领域存在问题,并且规范确实有所变化,但是从我的阅读中,我看不到任何使观察到的行为成为预期行为的东西,甚至也没有引用这种行为
因此,从这里开始,所有这些听起来都像是个错误。随时在 Blink>绑定组件中的chromium's board上打开一个新期刊。
您可能想让他们知道等分线显示的ChangeLog URL。他们将能够告诉您它是否确实是预期的。