2015-10-12 58 views
6

在编程挑战我最近参加了我不得不使用window.name属性来存储/操作数据。我发现,当你改变这个属性时,它通过页面刷新持续存在(虽然不是当用同一个URL打开一个新页面时)。为什么window.name被缓存?

我能找到的唯一信息是,这是已知的,甚至被某些框架用作数据存储,但我会对(为什么window.name持久化?任何历史原因?)和如何(在页面更改和丢弃时保留window.name哪些规则?)。

显然,我的Google-fu不够强大,无法找到这些问题的答案(在MDN页面上甚至没有提及它),所以我希望也许你能帮助我。

谢谢,大卫

回答

1

我的理解是窗口对象在选项卡的整个生命周期内都是持久的,并且表示加载不同HTML文档的窗口。

每个标签都包含自己的window对象,这就是为什么即使你导航到/来自不同页面的窗口对象是持久的,而如果你不同的选项卡中的window.name上检查会有所不同。

当打开不同的HTML页面,他们大多不会覆盖window.name属性,它是完全可选的。如果没有别的东西在操纵它,那将是你留下的东西。大多数页面仅涉及操纵window.document本身。

0

名为Windows作为链接目标,对于一个:

<a href="example.html" target="some_page">some page</a> 

该链接将在新窗口中打开一次,并在同一个窗口,如果它仍然对后续存在点击,窗口的名称是它的目标。

window.open的第二个参数也是一个窗口名称。

window.open('example.html', 'some_page'); 

您可以在浏览器中通过不相关的网站试用它;在一个选项卡的控制台中,设置window.name = 'test';,在另一个选项卡中,使用window.open('https://example.com/', 'test');。 (您可能需要通过弹出式窗口拦截器。)无关的选项卡应导航至https://example.com/