Проблемы с обработчиком событий «load» в Firefox Extension Development - PullRequest
0 голосов
/ 04 июля 2011

Я пишу расширение Firefox, но у меня есть проблемы с взаимодействием с пользователем из-за правильного получения правильных событий. Мое расширение должно выполнить следующие задачи:

  • проверить текущую вкладку браузера на определенных структурах
  • сделать несколько вызовов внутреннего сервера
  • Открыть диалог
  • перенаправление пользователя на целевую страницу

Пока все хорошо, все работает. Я запускаю последовательность со следующим eventHandler:

window.gBrowser.selectedTab.addEventListener("load",function(){ Fabogore.Load();},true);

после открытия диалога я пытаюсь удалить EventHandler из диалога:

window.opener.gBrowser.selectedTab.removeEventListener("load",function(){Fabogore.Load();},true);

Но последовательность запускается снова и снова, EventListener извлекает каждое событие загрузки каждой вкладки, хотя я использовал selectedTab? Таким образом, диалог всплывает снова и снова. Я также пытался закрыть обработчик событий в исходном Javascript.

Есть догадки?

1 Ответ

0 голосов
/ 04 июля 2011

Это легко объяснить - функция, которую вы добавляете как слушатель, и функция, которую вы удаляете, отличаются.Попробуйте запустить этот код:

alert(function(){ Fabogore.Load();} == function(){ Fabogore.Load();});

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

var listener = function(){ Fabogore.Load();};
var listenerTab = window.gBrowser.selectedTab;
listenerTab.addEventListener("load", listener, true);
[...]
listenerTab.removeEventListener("load", listener, true);

Обратите внимание, что я также сохранил значениеwindow.gBrowser.selectedTab в переменной - к тому времени, когда вы решите удалить слушателя, выбранная вкладка может уже измениться.Вы хотите удалить слушателя из вкладки, на которой вы его добавили, а не какой-либо другой вкладки.

...