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