特定のイベントが特定のブラウザでサポートされているかどうかを検出することは可能ですか? ブラウザdocument.addEventListener
が をサポートしているかどうかは検出できますが、イベントをサポートしているかどうかを知る必要がありますDOMAttrModified
。Firefox と Opera はサポートしていますが、Chrome などはサポートしていません。
5848 次
2 に答える
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;
}
}
Firefoxは、上記のすべての変更でコールバックをトリガーします。それらのどれにもChromeはありません。
元の答え:
この便利なページに示されているように、一部のイベントがサポートされているかどうかを機能検出できます。そのコードを具体的にテストできるかどうかはわかりませんが、可能であれば、そのコードで開始できる可能性があります。
更新:KangaxのコードをJSBinにダンプして試してみましたが、そのイベントでスニッフィング手法が機能していないようです(名前のスペルが間違っているか何かがない限り、Firefoxは「false」を表示しています)。しかし、上記の私のテクニックはそうです。
于 2010-12-30T12:03:47.747 に答える
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;
}
于 2014-10-03T05:46:49.110 に答える