Javascript-определить, поддерживается ли список событий

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

спасибо, если кто может помочь!

2 ответов


обновил ответ:

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


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

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

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


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;
  }