Javascript - 检测是否支持事件侦听器

时间:2010-12-30 11:50:32

标签: javascript javascript-events event-handling detection browser-detection

是否可以检测某些浏览器是否支持某些事件? 我可以检测浏览器是否支持document.addEventListener,但我需要知道它是否支持DOMAttrModified事件。 Firefox和Opera支持它,但Chrome和其他人不支持。

谢谢,如果有人可以提供帮助!

2 个答案:

答案 0 :(得分:15)

更新回答

,您可以对此进行功能检测。创建元素,侦听事件并更改元素的属性。在我的测试中,您甚至不必将元素添加到DOM树中,这使得它成为一个很好的,包含的特征检测。

示例:

function isDOMAttrModifiedSupported() {
    var p, flag;

    flag = false;
    p = document.createElement('p');
    if (p.addEventListener) {
        p.addEventListener('DOMAttrModified', callback, false);
    }
    else if (p.attachEvent) {
        p.attachEvent('onDOMAttrModified', callback);
    }
    else {
        // Assume not
        return false;
    }
    p.setAttribute('id', 'target');
    return flag;

    function callback() {
        flag = true;
    }
}

Live copy

Firefox触发上述所有修改的回调;没有Chrome浏览器。


原始回答

您可以通过功能检测是否支持某些事件,如this handy page所示。我不知道你是否可以专门测试那个,但如果可以的话,那个代码可能会让你开始。

更新:我dumped Kangax's code into JSBin并尝试过,看起来嗅闻技术看起来不适用于该事件(除非我的名字拼写错误或其他内容; Firefox显示“false “)。但我的上述技术确实如此。

答案 1 :(得分:0)

function isDOMAttrModifiedSupported () {
    var supported = false;
    function handler() {
      supported = true;
    }
    document.addEventListener('DOMAttrModified', handler);
    var attr = 'TEST';
    document.body.setAttribute(attr, 'foo'); // aka $('body').attr(attr, 'foo');
    document.removeEventListener('DOMAttrModified', handler);
    document.body.setAttribute(attr, null);
    return supported;
  }