检测正在工作的CustomEvent构造函数

时间:2014-01-06 18:43:24

标签: javascript

我想测试是否支持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浏览器呢?

3 个答案:

答案 0 :(得分:15)

以下应该可以工作,即使在IE6上,我也在IE6旧机器上进行了测试。

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

答案 1 :(得分: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;
  }
})();

答案 2 :(得分:1)

MDN文档声明它是IE9及更高版本。

这样的检查可能已经足够了:

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

抱歉jsfiddle不支持IE8。