2014-01-06 4 views
6

CustomEvent constructorがサポートされているかどうかをテストします。作業中のカスタムイベントコンストラクタを検出します。

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では、タイプは 'function'ではなく 'object'です –

3

ええ、のtry/catchはIE8がスローされます、動作するはずです:IE11一方

TypeError: 'CustomEvent' is undefined 

がスローされます。

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

関連する問題