Обнаружение поддержки данного события JavaScript?

Я интересуюсь использованием JavaScript hashchange событие для наблюдения изменений в идентификаторе фрагмента URL. Я знаю о Действительно Простой Истории и плагинах jQuery для этого. Однако я сделал вывод, что в моем конкретном проекте это не действительно стоит добавленных издержек другого файла JS.

Что я хотел бы сделать, вместо этого, следуют "прогрессивным улучшением" маршрут. Таким образом, я хочу протестировать, поддерживается ли hashchange событие браузером посетителя, и напишите мой код для использования его, если это доступно как улучшение, а не базовая функция. IE 8, Firefox 3.6 и Chrome 4.1.249 поддержки это, и это составляет приблизительно 20% трафика моего сайта.

Так, мм... есть ли некоторый способ протестировать ли поддержка браузера конкретное событие?

Спасибо.

22
задан Will 20 May 2010 в 20:04
поделиться

2 ответа

Что ж, лучший подход - это не сканирование браузера, Юрий Зайцев ( @kangax ) сделал действительно полезный метод для обнаружения поддержки событий:

var isEventSupported = (function(){
  var TAGNAMES = {
    'select':'input','change':'input',
    'submit':'form','reset':'form',
    'error':'img','load':'img','abort':'img'
  }
  function isEventSupported(eventName) {
    var el = document.createElement(TAGNAMES[eventName] || 'div');
    eventName = 'on' + eventName;
    var isSupported = (eventName in el);
    if (!isSupported) {
      el.setAttribute(eventName, 'return;');
      isSupported = typeof el[eventName] == 'function';
    }
    el = null;
    return isSupported;
  }
  return isEventSupported;
})();

Использование:

if (isEventSupported('hashchange')) {
  //...
}

Теперь этот метод используется в некоторых библиотеках, например jQuery .

Подробнее здесь:

30
ответ дан 29 November 2019 в 04:17
поделиться

В документации Mozilla предлагается следующее:

if ("onhashchange" in window) {
    alert("The browser supports the hashchange event!");
}

Это работает в IE8 и в бета-версии Chrome 5 (я не тестировал Chrome 4.1), и правильно не работает в Opera и Safari.

19
ответ дан 29 November 2019 в 04:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: