2014-05-19 27 views
0

我創建了一個Chrome擴展,其中包含一個彈出窗口,用戶可以選擇並保存不同的設置。我將這些設置保存到localStorage中,這是在所有選項卡上共享的。我希望用戶能夠爲不同的網頁保存不同的設置。如何在Chrome擴展中保存不同頁面的不同設置?

這是我想要的工作是什麼:

  1. 用戶可以到網站1和保存設置的
  2. 用戶則可以去現場2並保存設置b
  3. 每當用戶返回到位點1,設定A是活動的(並且在彈出顯示)
  4. 每當用戶返回到站點2,設置B的活性(並顯示在彈出)

截至目前,無論用戶何時更改任何頁面上的設置,這些設置在所有頁面上都處於活動狀態。

我已經從瀏覽器動作轉移到頁面動作,但由於我將設置保存到同一個localStorage中,它沒有任何區別。

我唯一的想法是將URL保存到localStorage中作爲鍵和所有設置作爲值。有沒有更乾淨的方法來做到這一點?

謝謝!

回答

0

至少有兩種可能的解決方案。

第一個暗示在你自己的問題,以及Zig Mandel的答案。是的,您可以在通過URL /主機名索引的對象中包含偏好設置,例如[hostname].option或具有多個密鑰但是以其爲前綴,例如[hostname+".option1"]

如果你確實走了這條路線,尤其是第一個變體,我強烈建議從localStorage切換到chrome.storage.local API。它自動爲您序列化值。如果您不喜歡它是異步的,那麼您可以爲它創建一個特定於頁面的緩存,該緩存將加載一次並隱藏chrome.storage的異步特性。

第二種解決方案是重擊者,但可能更容易處理;它是以IndexedDB的形式使用一個完整的數據庫。

+0

謝謝,我使用了前綴,實際上並不難實現。但我有一個後續問題:現在,如果用戶從站點1導航到站點2,則只有在用戶單擊彈出式圖標後纔會更新設置。一旦他點擊,彈出代碼運行,設置更新到網站2的那些。你知道是否有可能在導航到新頁面時運行popup.js? – Ekaterina

+0

_這是一個無關的問題;我會回答一次,並會提供**沒有後續**。如果您仍然需要幫助 - 請提出一個新問題._使用監聽某些事件的背景頁面。無論是['chrome.tabs.onUpdated'](https://developer.chrome.com/extensions/tabs#event-onUpdated)和其他'tabs'事件,還是使用['chrome.webNavigation' API](https:/ /developer.chrome.com/extensions/webNavigation)事件。 – Xan

+0

我感覺它聽起來像一個無關的問題...非常感謝你的幫助:) – Ekaterina

1

而不是傾倒所有的首選項在一個單一的關鍵,你可以改爲現有的密鑰前綴與網站的根。

相關問題