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