文档被其他选项卡使用

发布于 12-07 12:06 字数 638 浏览 0 评论 0原文

在我的火狐插件中。 我在浏览器中打开了两个选项卡,当我尝试在间隔/超时后访问“文档”时,在其中一个选项卡中,我会抓取另一个选项卡的文档...

例如: 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?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

羞稚2024-12-14 12:06:32

不要忘记声明局部变量

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

未声明的变量自动是全局变量,并且特别是从现在到超时运行之间可能会发生变化(不用介意许多其他令人讨厌的副作用)。

更好的是:开启严格模式。它将确保此错误产生可见错误并且不会被忽视。

Don't forget to declare local variables:

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

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文