Как обнаружить поддержку `фокусировки`?

Благодаря 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?

13
задан Sam Hanley 2 May 2015 в 01:42
поделиться