【问题标题】:Polyfill for attachEvent removing dhtmlx attachEvent function用于 attachEvent 的 Polyfill 删除 dhtmlx attachEvent 函数
【发布时间】:2020-01-23 03:10:34
【问题描述】:

我正在为我们的旧产品添加 chrome 支持(ie8 支持), 问题是我为 attachEvent 添加了 polyfill

if (!isIE() && Object.attachEvent == null) {
    Object.defineProperty(Object.prototype, 'attachEvent', {
        value: function(event, func) {
            if ('string' !== typeof event || event.indexOf('on') !== 0) {
                return;
            }
                this.addEventListener(event.substring(2), func, false);
        },
        enumerable: false
    });
}

但我们使用的是 dhtmlx 3rd 方库,它使用 attachEvent 函数管理事件, 所以我的 polyfill 覆盖了这个函数,是什么让 dhtmlx 失去了功能。

任何想法我该如何解决这个问题? 我想填充 attachEvent 但不覆盖 dhtmlx 的 attachEvent 谢谢!

【问题讨论】:

  • 为什么dhtmlx自称是JavaScript/HTML5 UI Component Libraries,却用attachEvent函数管理事件
  • 他们通过函数名称“attachEven”管理事件的问题,它唯一的函数名称,用于管理事件的包装函数,但实际上并未弃用“attachEvent”
  • 那么问题是什么?如果“他们”有一个名为attachEvent 的函数,那么它不会跨浏览器工作吗,因为“他们”声称是一个现代 UI 组件库?为什么你只在非 IE 浏览器中尝试填充 attachEvent 方法?

标签: javascript internet-explorer dhtml


【解决方案1】:

无需检查IsIE() ...因为无论如何只有IE使用非标准attachEvent

对于其他浏览器,您可以填充 EventTarget.prototype.attachEvent - 因为这是定义 addEventListener 的地方

if (EventTarget.prototype.attachEvent == null) {
    Object.defineProperty(EventTarget.prototype, 'attachEvent', {
        value: function(event, func) {
            if ('string' !== typeof event || event.indexOf('on') !== 0) {
                return;
            }
            this.addEventListener(event.substring(2), func, false);
        },
        enumerable: false
    });
}

【讨论】:

  • 嗨,但我仍然覆盖 dhtmlx 的 attachEvent。
  • @IgorKorchagin - 你确定吗?所以dhtmlx添加attachEvent函数?他们在哪里添加它?哪个原型?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-09
  • 1970-01-01
相关资源
最近更新 更多