2015-10-12 108 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/