Благодаря 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
не будет работать. Я проверил это, и это правда:
Do I support focusin?
Вышеупомянутые предупреждения Нет...
в Chrome!!! Есть ли способ определить, поддерживает ли браузер focusin
, не используя browser sniffing?