文档被其他选项卡使用
在我的火狐插件中。 我在浏览器中打开了两个选项卡,当我尝试在间隔/超时后访问“文档”时,在其中一个选项卡中,我会抓取另一个选项卡的文档...
例如: Tab 1,document.title为:“测试页” 选项卡 2,document.title 是:“第二个选项卡”
我在选项卡 1 中运行脚本:setTimeout(function(){alert(document.title)}, 5000)。 应警告“测试页”,但警告显示“第二个选项卡”。
这是我的脚本:
gBrowser.addEventListener("DOMContentLoaded",function(e){
window = e.originalTarget.defaultView;
document = window.document;
setTimeout(function(){ alert(document.title); }, 5000);
}, true);
只有当我打开第一个选项卡,然后打开第二个选项卡时,才会发生这种情况。
当我尝试更改任何 dom 元素时,也会发生同样的事情。
当用户单击按钮时也会发生。
如何避免这种情况? 这可能是 Firefox 的错误还是我的错误?
In my firefox addon.
I have two tabs open in my browser, when I try to access the "document" after a interval/timeout, in one of the tabs, I grab the document of another tab instead...
For example:
Tab 1, document.title is: "Test page"
Tab 2, document.title is: "Second tab"
I run a script in tab 1: setTimeout(function(){alert(document.title)}, 5000).
Should alert "Test Page", but the alert shows "Second tab".
Here my script:
gBrowser.addEventListener("DOMContentLoaded",function(e){
window = e.originalTarget.defaultView;
document = window.document;
setTimeout(function(){ alert(document.title); }, 5000);
}, true);
This only happends when I open the first tab, then a open the second.
The same thing happens when I try to change any dom element.
Also happend when a user click on a button.
How to avoid that?
This could be a bug with firefox or is with me?
不要忘记声明局部变量:
未声明的变量自动是全局变量,并且特别是从现在到超时运行之间可能会发生变化(不用介意许多其他令人讨厌的副作用)。
更好的是:开启严格模式。它将确保此错误产生可见错误并且不会被忽视。
Don't forget to declare local variables:
Undeclared variables are automatically global and in particular can change between now and when your timeout runs (never mind lots of other nasty side-effects).
Even better: switch on strict mode. It will make sure that this mistake produces a visible error and doesn't go unnoticed.