слушатели событий на плагине в document.onload события в опере - PullRequest
1 голос
/ 01 марта 2010

Я пытаюсь понять проблему, при которой регистрация прослушивателей событий в плагинах не работает в Opera, если я не задерживаю их.

В частности, это не работает:

document.onload = function() {
    plugin.addEventListener("foo", function() { alert('onFoo'); }, false);
}

при задержке вызова addEventListener(), например, через alert() делает:

document.onload = function() {
    alert('onload()');
    plugin.addEventListener("foo", function() { alert('onFoo'); }, false);
}

Кажется, что плагины загружаются только после document.onload.

Как не веб-разработчик, я что-то упускаю здесь? Или это известная проблема Opera с общим обходным путем?

Ответы [ 3 ]

2 голосов
/ 15 марта 2010

в целом время инициализации плагина, выполнения скрипта и обработки событий документа не очень хорошо определено, что означает, что браузеры могут делать разные вещи.

В этом случае кажется, что вам нужно убедиться, что плагин инициализирован, прежде чем добавить слушателя. Один из способов сделать это - проверить свойство, которое определит плагин (например, если это был плагин Flash, вы можете проверить, был ли определен PercentLoaded, чтобы увидеть, готов ли он к написанию сценариев.) можно использовать тайм-аут, чтобы повторить попытку чуть позже.

В Opera мы недавно пытались настроить большинство других браузеров в этой области, и Opera 10.50 может работать лучше для вас. Хотя я не уверен, что мы все еще полностью контролируем - было бы интересно услышать от вас, изменилось ли поведение в 10.50.

1 голос
/ 12 августа 2010

Мы еще больше улучшили обработку этого в Opera 10.60, чтобы поведение было намного ближе к другим браузерам. инициализация плагина и готовность скрипта. Я считаю, что оригинальный подход должен работать сейчас.

0 голосов
/ 01 марта 2010

Я мало что знаю об Opera, но вы пытались использовать функцию готовности jquery? Его цель - добавить функцию, которую вы хотите выполнить после полной загрузки DOM, и она должна работать в разных браузерах.

$(document).ready(function() {
 plugin.addEventListener("foo", function() { alert('onFoo'); }, false);
});

Более подробную информацию о функции готовности можно найти здесь

...