检测是不是支持事件监听器

Posted

技术标签:

【中文标题】检测是不是支持事件监听器【英文标题】:Detect if event listener is supported检测是否支持事件监听器 【发布时间】:2011-06-01 12:46:53 【问题描述】:

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

【问题讨论】:

我不认为这是可能的,但请看这里以查看对 IE 和 Chrome 的支持:help.dottoro.com/ljdchxcl.php 谢谢,但是我已经为所有浏览器提供了有效的解决方案。我希望有一种方法来检测某些浏览器是否支持该事件,以便我可以应用我的替代方法。看来我可能不得不求助于 jQuery.browser 检测。 【参考方案1】:

更新答案

是的,您可以对此进行特征检测。创建一个元素,监听事件,并更改元素的属性。在我的测试中,您甚至不必将元素添加到 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 显示“假”) .但是我上面的技术可以。

【讨论】:

@ifaour:哇,这很奇怪。还有FF 3.6。然而,我们都知道那不是真的…… ppk 声明 here DOMAttrModified 类型的事件不适用于传统的 onEvent 事件注册系统,所以这可能是破坏你在那里的测试的原因,它只寻找onEvent 元素中的属性 @Yi Jiang:是的,kangax 的代码是用于测试用户生成的事件。我更新的答案中的测试效果很好,因为我们可以轻松触发我们正在测试的条件。 :-) 感谢克劳德,效果很好!巧合的是,我实际上只是想出了这个解决方案,并把它贴在这里只是为了看到你打败了我!【参考方案2】:
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;
  

【讨论】:

以上是关于检测是不是支持事件监听器的主要内容,如果未能解决你的问题,请参考以下文章

input输入框内容变化实时监听

怎样理解js中的事件监听

监听器

watch事件监听方法

深入理解Spring的容器内事件发布监听机制

深入理解Spring的容器内事件发布监听机制