Благодаря Perfection kill, мы можем использовать следующий JavaScript для обнаружения поддержки событий:
function hasEvent(ev) {
var elem = document.createElement('a'),
type = 'on' + ev,
supported = elem[type] !== undefined;
if (!supported) {
elem.setAttribute(type, 'return;');
supported = typeof elem[type] === 'function';
}
elem = null;
return supported;
}
Это работает в течение единственного времени, в котором я нуждаюсь: обнаружение mouseenter
поддержки; hasEvent('mouseenter')
вернет false в Chrome, Firefox и т.д., как и должно быть.
Но теперь я пытаюсь "исправить" браузеры, которые не поддерживают события focusin
и focusout
. Согласно PPK, это в основном просто Firefox. К сожалению, Chrome и Safari указаны как имеющие "неполную" поддержку по следующей причине:
Safari и Chrome запускают эти события только с помощью addEventListener; не с традиционной регистрацией.
В общем, этот штраф; Я бы использовал только addEventListener
. Это означает, однако, что обнаружение поддержки через elem.onfocusin !== undefined
не будет работать. Я проверил это, и это правда:
<p>Do I support <a href="#">focusin</a>?</p>
<script>
var elem = document.getElementsByTagName('p')[0];
// hasEvent method defined here
function listener() {
var response = hasEvent('focusin') ? 'Yes!' : 'No...';
alert(response);
}
elem.addEventListener('focusin', listener, false);
</script>
Вышеуказанные предупреждения No...
в Chrome! Есть ли способ определить, поддерживает ли браузер focusin
, не используя обнюхивание браузером?