2014-01-06 101 views
6

我想測試是否支持CustomEvent constructor檢測工作CustomEvent構造函數

var ev; 

if (/* CustomEvent constructor supported? */) { 
    ev = new CustomEvent('splat'); 
} else { 
    ev = document.createEvent('Event'); 
    ev.initEvent('splat'); 
} 

this.dispatchEvent(ev); 

我沒有任何機器在附近運行IE來測試它。它會拋出一個錯誤,所以我可以使用try/catch,還是我需要做其他的事情?更老的非IE瀏覽器呢?

+0

如果沒有人打我,我可能會拖出一些舊的瀏覽器,當我有更多的時間自我回答。我只是希望有人已經知道答案。 –

回答

1

MDN文檔聲明它是IE9及更高版本。

像這樣的檢查可能是不夠好:

if (window["CustomEvent"] === undefined) { 
    // Do stuff to add custom event class 
} 

對不起的jsfiddle不支持IE8。

+4

在IE11中,存在'window.CustomEvent',但不能用作構造函數。 –

14

即使在IE6上,以下方式也應該可以工作,我已經在使用IE6的舊XP機器上測試過了。

if (typeof CustomEvent === 'function') { 
    ev = new CustomEvent('splat'); 
} 
+0

因此'window.CustomEvent'在舊IE中未定義?不知何故,MDN文檔給我的印象是,它仍然存在於舊版瀏覽器中,但沒有用作構造函數。 –

+0

在IE11中,它的類型是'object',而不是'function' –

3

呀,try/catch語句應該工作,IE8會拋出:

TypeError: 'CustomEvent' is undefined 

雖然IE11會拋出:

Object doesn't support this action 

其他舊的瀏覽器要麼還沒有實現它的全部,或不作爲構造函數,所以應該導致類似的錯誤

所以你可以做這樣的事情:

var isSupported = (function() { 
    try { 
    new CustomEvent('test'); 
    return true; 
    } catch (e) { 
    return false; 
    } 
})(); 
+1

這並不直接回答這個問題,請您澄清一下try catch是否會在這種情況下工作,或者是否需要任何額外的操作。 – apokryfos

+0

已更新,直接回答問題 –

+0

謝謝你隊友!這正是我需要的。 – hayatbiralem