2014-06-05 25 views
2

我知道Window对象是浏览器(标签),其一切所附的“主”客体 - 核心方法,全局声明的变量,函数,即使是DOM。它高于一切。Window对象和属性持久性

当我去到不同的网页在同一个浏览器窗口(标签),我想在window对象保持不变(仅DOM的变化),因为历史和其他东西是可访问的。为什么我不明白为什么连接到窗口对象的全局变量(即使使用window.myvariable)不能保留。

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

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

+3

你的假设是错误的,每个标签都有自己的'window'对象。另外,'window'上面有浏览器本身,例如'history'和许多其他对象基本上来自哪里。 – Teemu

+0

已编辑,所以它提到了选项卡。我引用“主”这个词来表示它不是真正的主人,但我明白你的观点,它并不是一切。但是在同一个标​​签中,它仍然是网页上所有内容的主要对象,以及与浏览器的所有网页交互都经历了哪些主对象。因此“主人”。 – RonS

+0

我的观点实际上是“每个选项卡都有自己的窗口对象”,浏览器就在那里指向,“窗口”是其中的一部分对象。您也可以将变量(或至少是值)传递给其他窗口,这仅受安全功能的限制。如果您使用JS在新选项卡/窗口中的相同域中打开页面,则还可以与其窗口对象进行交互。 PostMessage甚至可以与跨域iframe进行交互。 – Teemu

回答

1

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

浏览器怎么能是安全的(如果你的浏览器的供应商)?

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

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

你可能想看看Same-Origin Policy和一定的限制被放宽可能会有所帮助。

+0

我不是一个母语英语说话人,所以我可能不会看到我谈论的标签之间的沟通,关于你是第二个提到这一点。但我感觉没有人读到“当我在同一个浏览器窗口(标签)中去不同的页面时,我想窗口对象仍然是相同的”文本... – RonS

+0

@RonS:如果你的意思是点击不同的网页网址从您所在的页面开始,适用相同的规则。例如,假设你在www.hello.com,并有一个连接到www.jello.com的链接,并单击锚点,现在从你的全局变量到对象的所有内容都被重置。但是,如果点击产生新的iframe,则可以在窗口之间进行通信,在这种情况下,第一个窗口变为父窗口。希望这可以消除你的一些误解。 –

+0

确定接近,第一个,点击一个锚点链接(或在地址栏输入一个新地址,然后按回车键)。好,所以你说一切都重置(清除)。好的,谢谢:) – RonS