[英]Event handlers work in IE11 or Chrome, but not both
在代碼庫中,我幫助維護了這種形式的功能(為簡潔起見,將其簡化):
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中使用。 我們已經有一個用於CustomEvent的polyfill(具有如圖所示的隱含用法),但是還有什么其他阻止此功能跨瀏覽器停留的原因呢?
您的第二個代碼段應該沒問題。 這是一個有效的示例(已在Chrome中為我成功測試):
const fn = document.body.addEventListener; fn.call(document.body, 'MyCustomEvent', e => { console.log('MyCustomEvent', e.detail); }); document.body.dispatchEvent(new CustomEvent('MyCustomEvent', { detail: 'it worked!' }));
也許您的CustomEvent
polyfill妨礙了您的工作,或者還有其他未顯示的因素在起作用?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.