【问题标题】:JS | From which interface does the addEventListener method comes from in IE?JS | IE中的addEventListener方法来自哪个接口?
【发布时间】:2016-07-08 08:37:35
【问题描述】:

在现代浏览器中,addEventListener 属性属于EventTarget 接口。

根据 MDN 兼容性图表 - 从 IE9 开始支持它,但是,我无法从 IE9 或 10 访问它。

addEventListener在IE中属于什么接口?

【问题讨论】:

  • 在谈论较旧的 Internet Explorer 版本时,这个问题可能没有意义;可能与其他浏览器所认为的“界面”完全不同,或者如果有一些东西,那就完全不同了。
  • 许多旧版本的 IE 实现了 DOM 原生对象,因此它们没有 JavaScript 原型之类的东西。
  • 根据这个MSDNpost,根本没有接口,虽然一般来说,这些浏览器确实支持各种接口,包括Element,HTMLElement等。 Element.prototype.addEventListener 确实存在,但是,对于我的目的来说,它在抽象链上太低了。

标签: javascript internet-explorer internet-explorer-9 internet-explorer-10 addeventlistener


【解决方案1】:

我在 Edge/IE 控制台上做了一些原型链嗅探:

IE11: 窗口对象, 你有 Window 构造函数和 Window.prototype.hasOwnProperty('addEventListener') 是真的。

关于html元素: 他们都从名为Node的构造函数中获取它

Node.prototype.hasOwnProperty('addEventListener') 是真的。 (document.body instanceof Node) === 周二

我相信 IE9/10 也一样

在 Edge 上,它的不同之处在于,在 html 元素和窗口对象的原型链中确实有 EventTarget 对象

我想知道它是否与 IE 方面的规范不兼容或它考虑的实现细节

【讨论】:

  • 实现细节——就规范而言,JavaScript 中的原型链不存在——另一方面,JavaScript 并不直接关心 DOM 规范——以及 DOM 对象(在JS) 可以做任何他们想做的事情,包括不像普通的 JS 对象。
  • 规范没有说明document.body instanceof HTMLElement 是否应该为真吗? (或任何其他元素)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-15
  • 1970-01-01
  • 2016-08-10
相关资源
最近更新 更多