为什么window.name被缓存?

时间:2015-10-12 06:49:09

标签: javascript

在我最近参与的编程挑战中,我不得不使用window.name属性来存储/操作数据。我发现,当您更改此属性时,它会在页面刷新时保留(尽管在打开具有相同URL的新页面时不会这样)。

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

显然,我的Google-fu还不足以找到这些问题的答案(在MDN页面上甚至没有提到它!)所以我希望也许你可以帮助我。

2 个答案:

答案 0 :(得分:1)

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

每个选项卡都包含自己的window对象,这就是为什么即使您导航到/从不同页面导航窗口对象是持久性的,而如果您在另一个选项卡上检查,window.name将是不同的

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

答案 1 :(得分:0)

命名窗口用作链接目标,用于:

<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/