В кодовом я помочь сохранить существует функцию этой формы (урезанные для краткости):обработчиков событий работают в IE11 или Chrome, но не оба
function setListeners(enable) {
const fn = enable ? document.body.addEventListener : document.body.removeEventListener;
fn('click', foo);
fn('MyCustomEvent', bar);
}
IE11 бросает Illegal Invocation
, в то время как другие браузеры работают нормально , Другой сопровождающий включил функцию в эту форму:
function setListeners(enable) {
const fn = enable ? document.body.addEventListener : document.body.removeEventListener;
fn.call(document.body, 'click', foo);
fn.call(document.body, 'MyCustomEvent', bar);
}
Теперь он работает в IE11, но не в Chrome. У нас уже есть polyfill для CustomEvent (который подразумевает использование, как показано), но что еще препятствует тому, чтобы эта функция оставалась кросс-браузером?
Вам определенно нужен подход '.call', и что не удалось в Chrome? – loganfsmyth
Поскольку вторая версия должна работать, проблема, вероятно, в другом месте вашего кода. Поэтому вам нужно будет показать больше кода. – Barmar