#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;}
это была худшая проблема (вы нажимаете кнопку на вкладке, и событие происходит на второй вкладке)