Документ используется как другие вкладки

#javascript #firefox #firefox-addon

#javascript #firefox #firefox-дополнение

Вопрос:

В моем аддоне firefox. В моем браузере открыты две вкладки, когда я пытаюсь получить доступ к «документу» после интервала / тайм-аута, на одной из вкладок я вместо этого беру документ другой вкладки…

Например: вкладка 1, документ.заголовок: «Тестовая страница» Вкладка 2, документ.заголовок: «Вторая вкладка»

Я запускаю скрипт на вкладке 1: setTimeout(функция (){оповещение (document.title)}, 5000). Должно появиться предупреждение «Тестовая страница», но в предупреждении отображается «Вторая вкладка».

Вот мой скрипт:

 gBrowser.addEventListener("DOMContentLoaded",function(e){ 
    window = e.originalTarget.defaultView;
    document = window.document;
    setTimeout(function(){ alert(document.title); }, 5000);
}, true);
  

Это происходит только тогда, когда я открываю первую вкладку, а затем открываю вторую.

То же самое происходит, когда я пытаюсь изменить любой элемент dom.

Также происходит, когда пользователь нажимает на кнопку.

Как этого избежать? Это может быть ошибка в firefox или у меня?

Ответ №1:

Не забудьте объявить локальные переменные:

 gBrowser.addEventListener("DOMContentLoaded",function(e){ 
    var window = e.originalTarget.defaultView;
    var document = window.document;
    setTimeout(function(){ alert(document.title); }, 5000);
}, true);
  

Необъявленные переменные автоматически становятся глобальными и, в частности, могут изменяться с момента и до истечения времени ожидания (не говоря уже о множестве других неприятных побочных эффектов).

Еще лучше: включите строгий режим. Это гарантирует, что эта ошибка приведет к появлению видимой ошибки и не останется незамеченной.

Комментарии:

1. Спасибо, я не объявлял переменную. это помогло. Я исправил проблему с событиями, используя: function(e){var document = e.originalTarget.ownerDocument;} это была худшая проблема (вы нажимаете кнопку на вкладке, и событие происходит на второй вкладке)