Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/434.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 窗口对象和属性持久性_Javascript - Fatal编程技术网

Javascript 窗口对象和属性持久性

Javascript 窗口对象和属性持久性,javascript,Javascript,我知道Window对象是浏览器(选项卡)的“主”对象,所有内容都附加到它——核心方法、全局声明的变量、函数,甚至DOM。它高于一切 当我转到同一浏览器窗口(选项卡)中的不同页面时,我假设窗口对象保持不变(只有dom发生变化),因为历史记录和其他内容是可以访问的。我不太明白的原因是为什么附加到窗口对象的全局变量(即使使用window.myvariable)不会持久化 对我来说,唯一可能的解释是因为它是这样做的。如果是这样,会发生什么,“非核心”窗口元素(由代码设置的方法和变量)会被擦除吗;是每一个

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

当我转到同一浏览器窗口(选项卡)中的不同页面时,我假设窗口对象保持不变(只有dom发生变化),因为历史记录和其他内容是可以访问的。我不太明白的原因是为什么附加到窗口对象的全局变量(即使使用
window.myvariable
)不会持久化

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


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

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

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

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

  • 第二,限制它们提供的某些功能


您可能需要查看并放宽某些限制,这些限制可能会有所帮助。

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


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

如果您的假设是错误的,每个选项卡都有自己的
窗口
对象。此外,在
窗口
上方还有浏览器本身,例如
历史
和许多其他对象基本上都来自于此。编辑后,它会提到选项卡。我引用了“大师”这个词来表示它不是真正的大师,但我明白你的意思,它不是高于一切的。但在同一个选项卡中,它仍然应该是页面上所有内容的主对象,以及所有网页与浏览器的交互都要经过的主对象。因此“主控”。我的观点实际上是“
每个选项卡都有自己的窗口对象”
”,浏览器就在这里,其中
窗口
获取其对象的一部分。您还可以将变量(或至少值)传递给其他窗口,这仅受安全功能的限制。如果使用JS在新选项卡/窗口中打开来自同一域的页面,还可以与其窗口对象交互。甚至跨域iFrame等都有PostMessage用于交互。我在这里没有很好地了解您。tab指的是一个实际的浏览器选项卡(使用ctrl+T打开),或者是指每次访问网页时都会引用一个新的窗口对象实例,其中“原型”(JS术语)包含指向浏览器的方法、指针等。我想要一个简单的力学信息。我在google.com上,然后我去yahoo.com。是否以某种方式重置(清除)google.com上设置的全局变量(如果有),或者浏览器是否为yahoo.com创建新的窗口实例。那么是清洁了窗口还是安装了新窗口:)我不是以英语为母语的人,所以我可能看不出我在谈论选项卡之间的通信,因为你是第二个提到这一点的人。但我觉得没有人会读到“当我在同一浏览器窗口(选项卡)中转到不同的页面时,我想窗口对象保持不变”文本…@RonS:如果你是指单击你所在页面的不同网页URL,那么同样的规则适用。例如,假设您在www.hello.com,有一个链接锚定到www.jello.com,然后单击锚定,现在从全局变量到对象的所有内容都被重置。但是,如果单击生成新的iframe,则可以在窗口之间进行通信,在这种情况下,第一个窗口将成为父窗口。希望这能消除你的一些误解。好的,走近一点,第一个,点击一个锚链接(或者在地址栏中键入一个新地址,然后按回车键)。好的,你说一切都重置(清除)。好的,谢谢你:是的,考虑一下我的回答,如果新的链接能够知道旧访问链接的变量。您可以很容易地看到,它将允许更多的浏览器安全漏洞。当然,除非新页面具有相同的来源。。。现在我意识到window.localStorage几乎是几年前我想要的。它实际上是window对象的一部分,其工作方式类似于为一个原点声明的window实例(sessionStorage更是如此)。如果它能装的不是绳子。。例如,您可以将jQuery放入其中。。。也许将来。。。