14

特定のイベントが特定のブラウザでサポートされているかどうかを検出することは可能ですか? ブラウザdocument.addEventListenerが をサポートしているかどうかは検出できますが、イベントをサポートしているかどうかを知る必要がありますDOMAttrModified。Firefox と Opera はサポートしていますが、Chrome などはサポートしていません。

4

2 に答える 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 に答える