Подтвердить что ты не робот

Javascript - обнаружение поддержки события lister

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

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

4b9b3361

Ответ 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;
    }
}

Живая копия

Firefox запускает обратный вызов во всех вышеперечисленных модификациях; Chrome ни на одном из них.


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

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

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

Ответ 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;
  }