Благодаря Perfection Kills мы можем использовать следующий 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
, без использования сниффера браузера?