Window对象和属性持久性

时间:2014-06-05 11:59:57

标签: javascript

我知道Window对象是浏览器(tab)的“主”对象,其中包含所有内容 - 核心方法,全局声明的变量,函数,甚至DOM。它高于一切。

当我在同一个浏览器窗口(标签)中转到另一个页面时,我认为窗口对象保持不变(只有dom更改),因为可以访问历史记录和其他内容。为什么我不太清楚为什么附加到窗口对象的全局变量(即使使用window.myvariable)不会持久存在。

对我来说唯一可能的解释是因为它是这样做的。如果是这样,会发生“非核心”窗口元素(由代码设置的方法和变量)被删除;是每个新页面访问窗口对象的新实例(听起来对我来说最明显的方式)还是......?

我找不到关于此事的任何有用信息,通常人们只知道你不能在页面之间传递变量(除了cookie,网络存储,窗口标题),但为什么/如何(机制,不是原因)这种情况很难实现。谢谢。

2 个答案:

答案 0 :(得分:1)

浏览器中的每个选项卡都是独立的窗口对象,并且有自己的全局变量集,因此您对共享窗口对象的假设不正确。您的javascript不会也不应该被允许在标签之间查看。如果可以,那么想象一下您打开的一个网页在选项卡之间嗅探数据和其他信息。您的标签不允许进行浏览历史记录(我认为它们可以获取历史记录的长度)。

浏览器如何安全(如果您是浏览器的供应商)?

  • 首先,它可以选择不支持某些功能,例如任意读取客户端文件系统等时间段。

  • 其次,限制他们提供的一些功能。

您可能需要查看Same-Origin Policy以及放宽可能有用的某些限制。

答案 1 :(得分:1)

所有全局 JavaScript 变量、函数和对象都会自动成为 window 对象的成员,并且只要新页面未在同一浏览器窗口(选项卡)中加载/访问,它们就会持久化。

每当加载新页面或我们重定向到同一选项卡中的新页面时,这些函数和先前文档中的变量的作用域就会结束,并且它们将从 window 对象中删除。并将新加载的文档(来自与文档关联的脚本)的全局声明变量和函数附加到窗口对象