Javascript - определить, поддерживается ли список событий - PullRequest
13 голосов
/ 30 декабря 2010

Можно ли определить, поддерживаются ли определенные события в определенных браузерах? Я могу определить, поддерживает ли браузер document.addEventListener, но мне нужно знать, поддерживает ли он событие DOMAttrModified. Firefox и Opera поддерживают его, а Chrome и другие - нет.

Спасибо, если кто-нибудь может помочь!

Ответы [ 2 ]

15 голосов
/ 30 декабря 2010

Обновленный ответ :

Да , вы можете определить это. Создайте элемент, прослушайте событие и измените атрибут элемента. В моих тестах вам даже не нужно было добавлять элемент в дерево 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 запускает обратный вызов для всех вышеуказанных модификаций; Хром ни на одном из них.


Оригинальный ответ :

Вы можете определить, поддерживаются ли некоторые события, как показано на этой удобной странице . Я не знаю, можете ли вы протестировать этот тест специально, но если вы можете, этот код вполне может помочь вам начать.

Обновление : я сбросил код Kangax в JSBin и попробовал его, не похоже, что этот метод сниффинга работает для этого события (если только у меня не написано имя или что-то другое; Firefox показывает «ложь»). Но моя техника выше делает.

0 голосов
/ 03 октября 2014
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;
  }
...