如何检查浏览器对功能/事件的支持?

Kee*_*ker 3 javascript jquery mutation-events

过去,我们使用浏览器嗅探来推断某些事件或功能是否可用.我知道浏览器嗅探已被"弃用"或"避开",以支持功能嗅探.我想知道如何检查是否可以处理某个事件.

DOMNodeInserted为例.它受Chrome,FF和Safari的支持,但不受IE支持.如果此活动可用,我该如何嗅闻?有图书馆吗?你们怎么做适当的功能嗅探?

Mar*_*ahn 6

你无法检测到突变事件,而现代化也无法解决这个问题(因为人们会把它作为事实答案吐出来).

"检测"对突变事件的支持的唯一方法是尝试触发事件.伪代码:

var div = document.createElement('div'), supported = false;
div.addEventListener('DOMNodeInserted', function(){ supported = true; });
div.appendChild(div.cloneNode(true));
Run Code Online (Sandbox Code Playgroud)

请注意,如果上面的代码是线性代码,则它将无法正常工作,因为事件侦听器是异步的.然而,一般的想法是有效的,也许最好通过回调来实现.

  • 一般来说,+1是一个很好的答案,但DOM变异事件在所有浏览器中都不是异步的.据我所知,他们异步的唯一情况是WebKit中的可编辑内容(虽然这可能会改变).例如,在Firefox 4中尝试以下操作:`var div = document.createElement('div'),a ="sync"; div.addEventListener('DOMNodeInserted',function(){console.log("Inserted"+ a);},false); div.appendChild(使用document.createElement( "BR")); a ="async";`此外,您的代码在WebKit中不起作用:您似乎需要将div添加到文档中以便触发事件. (2认同)