Когда я должен наблюдать события JavaScript относительно окна по сравнению с документом по сравнению с document.body?

Я использую prototype.js для своего веб-приложения, и у меня есть все работающее на Chrome, Safari и Firefox. Я теперь работаю над совместимостью IE8.

Поскольку я отлаживал в IE, я заметил, что существуют события JavaScript, для которых я ранее установил наблюдателя на окне, например.

Event.observe(window, eventType, function () {...});

(где eventType мог бы быть "dom:loaded", "keypress", и т.д.), и это работает просто великолепно в Chrome/Safari/Firefox. Однако в IE наблюдатель никогда не стреляет.

По крайней мере в некоторых случаях я мог заставить это работать над IE, вместо этого разместив наблюдателя во что-то другое, чем window, например. document (в случае "dom:loaded") или document.body (в случае "keypress"). Однако это все эмпирически.

Там некоторый более систематический путь состоит в том, чтобы определить, куда разместить этих наблюдателей, таким образом, что результатами будет совместимый перекрестный браузер?

23
задан Brian Tompsett - 汤莱恩 21 July 2019 в 12:19
поделиться

2 ответа

Документация по объектам различных браузеров (например, window в MSDN, документ в MDC) определяют, какие события поддерживаются на объекте. Вы можете начать там.

2
ответ дан 29 November 2019 в 02:18
поделиться

(Это не очень исчерпывающий ответ, но, похоже, он работает эмпирически - так что, надеюсь, эти практические правила будут полезны другим.)

  • Как правило, события регистрируются в документе , а не в окне . Браузеры Webkit и Mozilla, похоже, довольны этим, но IE не реагирует на большинство событий, зарегистрированных в окне, поэтому вам нужно использовать документ для работы с IE

  • Исключение: resize , и события, связанные с загрузкой, разгрузкой и открытием / закрытием, должны быть установлены в окне.

  • Исключение из первого исключения: dom: loaded должно быть установлено в документе в IE.

  • Другое исключение: при обнаружении нажатий клавиш в Mozilla с включенной функцией поиска по мере ввода установите наблюдателей ключевых событий в окне , а не в документе . Если вы сделаете последнее, кажется, что поиск по типу заблокирует событие.

34
ответ дан 29 November 2019 в 02:18
поделиться
Другие вопросы по тегам:

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