2017-06-21 287 views
1

是否有隻能由創建它的頁面使用的瀏覽器存儲?瀏覽器標籤存儲?

我正在做一個TamperMonkey腳本來自動完成我的工作。它在來自特定域的頁面打開時觸發。然後,它會在所述頁面中找到特定的鏈接(相同的域),並在同一個標​​籤中打開它。如果新打開的頁面與條件匹配,則會返回到上一頁(手動檢查)。如果沒有,那麼它會自行關閉。

我使用localStorage的標記,如果一個頁面已經嘗試做此項檢查。否則,腳本會在原始頁面加載並陷入循環時重新打開該鏈接。

腳本運行平穩只有一個選項卡運行時。但是當我運行多個選項卡時(全部在同一個域中),它往往會失敗。我猜測每個標籤都可以訪問相同的localStorage,從而搞亂了循環檢查。無論如何我還沒有找到通過相同的腳本給每個標籤的localStorage一個獨特的名字。

因此,我需要一個瀏覽器存儲,可用於由製表即使它在同一個域中打開一個新的URL,但不具有相同的域的另一個選項卡可用。

+0

你在尋找類似['sessionStorage'(https://developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage) ? – Kaiido

+0

我得到了sessionStorage只是在會話結束後被刪除的localStorage的印象。兩者之間有沒有其他區別? –

+0

很適合你的情況,是的。會話僅在主窗口和由其打開的窗口之間共享。 – Kaiido

回答

2

您可以使用Window.sessionStorage用於此目的。

// Store in `name` in the current tab 
 

 
sessionStorage.setItem('name', 'Some Name'); 
 

 
// Get `name` from sessionStorage 
 

 
var name = sessionStorage.getItem('name'); 
 

 

 
alert(name); // Some Name

根據MDN

的sessionStorage的屬性,可以訪問會話存儲對象當前原點。 sessionStorage與Window.localStorage類似,唯一的區別是當存儲在localStorage中的數據沒有設置過期時,存儲在sessionStorage中的數據在頁面會話結束時被清除。只要瀏覽器處於打開狀態並且在頁面重新加載和恢復時存在,頁面會話就會持續。 在新選項卡或窗口中打開頁面將導致啓動新會話,這與會話cookie的工作方式不同。

Source

+0

如果多個選項卡同時運行腳本,該怎麼辦?當它在該條件下運行時,我的腳本失敗。我懷疑這是因爲:a)新打開的選項卡可以訪問另一個選項卡的localStorage並對其進行修改,或者b)只要打開新選項卡,localStorage就會被擦除乾淨。所有這些選項卡來自同一個域並運行相同的腳本,因此使用相同的名稱創建和修改localStorage。 –

+0

@RayArifin有localStorage'和'sessionStorage' '之間的差別,如果你使用'sessionStorage'那麼如果用戶打開兩個標籤是沒有問題的。每個標籤都有自己的'sessionStorage'。 –