用于 attachEvent 的 Polyfill 删除 dhtmlx attachEvent 函数
Posted
技术标签:
【中文标题】用于 attachEvent 的 Polyfill 删除 dhtmlx attachEvent 函数【英文标题】:Polyfill for attachEvent removing dhtmlx attachEvent function 【发布时间】: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
方法?
【参考方案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
函数?他们在哪里添加它?哪个原型?以上是关于用于 attachEvent 的 Polyfill 删除 dhtmlx attachEvent 函数的主要内容,如果未能解决你的问题,请参考以下文章
用于IE7的hashchange polyfill,可以跟踪每个tick的多个事件
重大变化:webpack < 5 用于默认包含 node.js 核心模块的 polyfill
用于 node.js crypto-js 的 webpack 5 角度 polyfill