Chrome v71定位标记作用域链引用了内部img标记的作用域

时间:2018-12-07 10:55:24

标签: javascript html google-chrome scope

更新到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可以正常工作。这可能是错误吗?还是我错过了某些其他浏览器尚未实现的更新?

1 个答案:

答案 0 :(得分:1)

在测试用例上运行bisect会显示更改是在this ChangeLog中进行的。

从此提交列表中,Create new EventHandler and base class for EventListener/EventHandler by Yuki Yamada似乎是该领域行为改变的最可能原因。

阅读提交说明和链接的问题664676759461,没有什么可以让我们认为这是预期的更改。

Chrome浏览器使用的EventTarget的领域存在问题,并且规范确实有所变化,但是从我的阅读中,我看不到任何使观察到的行为成为预期行为的东西,甚至也没有引用这种行为

因此,从这里开始,所有这些听起来都像是个错误。随时在 Blink>绑定组件中的chromium's board上打开一个新期刊。

您可能想让他们知道等分线显示的ChangeLog URL。他们将能够告诉您它是否确实是预期的。