窗口对象和属性持久化

Window object and properties persistance

本文关键字:持久化 属性 对象 窗口      更新时间:2023-09-26

我知道Window对象是浏览器(选项卡)的"主"对象,它附加了所有内容-核心方法,全局声明的变量,函数,甚至DOM。它高于一切。

当我去一个不同的页面在同一浏览器窗口(选项卡),我认为窗口对象保持不变(只有dom改变),因为历史和其他东西是可访问的。我不太明白的是,为什么附加到窗口对象的全局变量(即使使用window.myvariable)不持久。

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

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

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

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

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

  • 第二,限制他们提供的一些功能

你可能想看看同源策略和某些放松的限制,这可能会有所帮助。

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

无论何时加载新页面,或者我们在同一个选项卡内重定向到新页面,那么这些函数和变量的作用域从以前的文档结束,并从窗口对象中删除。全局声明的变量和函数为新加载的文档(从脚本与文档关联)被附加到窗口对象