【问题标题】:Do browsers propagate javascript variables across tabs?浏览器是否跨标签传播 javascript 变量?
【发布时间】:2014-09-23 12:48:00
【问题描述】:

我有一些 JavaScript 会查看是否设置了 var,如果设置了则执行某些操作,如果没有设置。

if (reset === 'reset') {
    gallery.unformat(container);
}

reset 仅在页面加载后设置。所以这个脚本只会在用户重新加载页面后执行。

如果我在 Firefox 中打开一个新标签,reset 未设置。如果我在 chrome 中打开一个新标签,reset 已设置。

因此,对于我的情况,chrome 可以正确处理它,并且只有在第一次访问该站点时才会设置此 var,因此一切正常。

我想知道变量是否会跨标签传播,如果是,哪些浏览器会做什么?

【问题讨论】:

    标签: javascript variables browser cross-browser


    【解决方案1】:

    变量应该在新标签页中持续存在。我无法重现您在 Chrome 中看到的行为。

    你应该看看使用cookies,或者如果你想成为HTML5,看看localStorage

    这两个都是特定于域的,而不是每个标签。

    例如在localStorage,你可以去;

    // Check that localStorage is supported in the current browser, and then try
    // to retrieve the item.
    if ('localStorage' in window && localStorage.getItem('reset') === 'reset') {
        gallery.unformat(container);
    }
    

    然后您可以稍后通过设置reset

    localStorage.setItem('reset', 'reset');
    

    【讨论】:

    • 本地存储肯定是一个想法。所以感谢您的建议:) 但我更关心为什么 chrome 会这样做而 firefox 不会。我会更仔细地研究这个,因为你没有经历过。也许我误解了编写的代码。
    • @JamieHutber 是的,您的代码中肯定存在逻辑错误。您应该发布您如何处理“仅在重新加载页面时才设置变量”之类的内容,因为这听起来很脆弱。
    • 是的,这是我昨天开始的合同。我只是注意到出现在 chrome 中而不是 Firefox 中的错误并推断出这个问题:) 可能会更新问题,但我会先看看自己
    【解决方案2】:

    不,变量值不应该在选项卡之间传播 - 每个选项卡都应该有自己的全局命名空间,如果一个选项卡可能影响另一个选项卡中的 JavaScript,就会出现各种安全问题。

    【讨论】:

      猜你喜欢
      • 2010-12-25
      • 1970-01-01
      • 2011-12-07
      • 2011-08-02
      • 1970-01-01
      • 1970-01-01
      • 2011-07-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多