javascript - 窗口对象和属性持久化

标签 javascript

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

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

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

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

最佳答案

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

浏览器如何保证安全(如果您是浏览器的 vendor )?

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

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

您可能想看看 Same-Origin Policy以及放宽的某些限制可能会有所帮助。

关于javascript - 窗口对象和属性持久化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24059675/

相关文章:

javascript - 访问子 FlatList 中的父 FlatList 数据

javascript - 将文件中的所有 "E"字符替换为 "Z"并将所有 "Z"字符替换为 "E"

javascript - 单击 View 时 Appcelerator 范围问题

javascript - 如何获取dom元素的当前html

javascript - 将变量传递给 JavaScript Rails

javascript - 使用jquery在同一方向连续滚动 slider

javascript - 为什么找不到id?

javascript - AJAX:人们在没有数据库的情况下在页面上实时交互?

javascript - Dojo/Angular 范围问题

javascript - decoratorsBeforeExport使用electron-webpack开发人员时出错