Объект не поддерживает это действие IE9 с инициализацией CustomEvent
В IE9 появляется следующая ошибка:
"Объект не поддерживает это действие".
Есть разные вопросы по этому поводу, но мой специально для следующего кода:
var myEvent = new CustomEvent("additem");
По моему мнению, CustomEvent поддерживается в IE9 как команда манипуляции DOM. Это отлично работает в Chrome без каких-либо исключений.
У кого-нибудь есть эта проблема и знаете, как ее решить? Спасибо.
Ответы
Ответ 1
Пользовательские события Afaik не поддерживаются в IE, только в обычных браузерах. Я предлагаю использовать библиотеку javascript, которая обеспечивает независимую от браузера реализацию, такую как JQuery trigger: http://api.jquery.com/trigger/
Ответ 2
Вы можете использовать функцию javascript для определения, является ли браузер IE11 или ниже, а затем применить следующий polyfill:
(function () {
function CustomEvent ( event, params ) {
params = params || { bubbles: false, cancelable: false, detail: undefined };
var evt = document.createEvent( 'CustomEvent' );
evt.initCustomEvent( event, params.bubbles, params.cancelable, params.detail );
return evt;
};
CustomEvent.prototype = window.Event.prototype;
window.CustomEvent = CustomEvent;
})();
polyfill сверху берется из MDN:
https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/CustomEvent
Ответ 3
Попробуйте этот polyfill, который не заменит собственный (и функциональный) метод CustomEvent.
(function () {
try {
new CustomEvent('test');
return;
} catch(e) {
// ignore this error and continue below
}
function CustomEvent ( event, params ) {
params = params || { bubbles: false, cancelable: false, detail: undefined };
var evt = document.createEvent( 'CustomEvent' );
evt.initCustomEvent( event, params.bubbles, params.cancelable, params.detail );
return evt;
};
CustomEvent.prototype = window.Event.prototype;
window.CustomEvent = CustomEvent;
})();
Ответ 4
Следующий polyfill не заменит родной CustomEvent(),
Частичный источник: MDN CustomEvent():
(function () {
if (typeof CustomEvent === 'function') { return; }
function customEvent(event, params) {
params = params || {bubbles: false, cancelable: false, detail: undefined};
var evt = document.createEvent('CustomEvent');
evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);
return evt;
}
customEvent.prototype = window.Event.prototype;
window.CustomEvent = customEvent;
})();