Polyfill для attachEvent, удаляющего dhtmlx функцию attachEvent - PullRequest
0 голосов
/ 23 сентября 2019

Я добавляю поддержку Chrome для нашего старого продукта (поддержка ie8), проблема в том, что я добавляю polyfill для attachEvent

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, которая управляет событиями с помощью функции attachEvent, так что мой polyfill переопределяет эту функцию, что делает dhtmlx неработоспособным.

Любые идеи, как я могу решить эту проблему?Я хочу заполнить файл attachEvent, но не переопределить attachEvent из dhtmlx. Спасибо!

1 Ответ

0 голосов
/ 23 сентября 2019

Не нужно проверять 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
    });
}
...