Chrome v71 锚标记范围链引用内部 img 标记的范围



在更新到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标记作用域,因此引用img节点的complete字段而不是complete()函数。这在这支钢笔里是可复制的。

<img><a>的子节点,所以当触发onclick时,引用<img>的范围似乎很奇怪。当然,您可以通过简单地将函数的名称更改为complete以外的名称来修复它。但我不知道是什么原因导致了这种变化。Chrome v70或Explorer或Safari可以正常工作。这可能是个bug吗?或者我错过了一些其他浏览器尚未实现的更新?

在测试用例上运行平分线可以发现在这个ChangeLog中进行了更改。

从这个提交列表中,Yuki Yamada为EventListener/EventHandler创建新的EventHandler和基类似乎是该领域行为变化的最合理原因。

读取提交描述和链接的crbugs 664676&759461,没有什么能让人认为这是一个有意的改变。

Chrome在使用EventTarget的Realm时出现了问题,规格确实发生了一些变化,但从我所读到的内容来看,我看不到任何能使观察到的行为成为预期行为的东西,也没有提到这种行为。

所以,从这里来看,这一切听起来像是一个bug。请在Blink>Binding组件中打开铬板上的新问题。

您可能想让他们知道平分线显示的ChangeLog URL。他们将能够告诉你这是否真的是有意为之。

最新更新