如何在扩展背景页面中访问localStorage?

时间:2014-05-23 18:32:07

标签: javascript html5 google-chrome-extension content-script

我有一个chrome扩展,可以在内容脚本中的JavaScript localStorage中设置字符串值。我已经测试过它是通过抓住并显示来设置的。在加载后的同一页面上,我仍然可以在javascript控制台中访问存储的字符串。如果我转到任何其他选项卡js控制台或当我尝试在我的其他扩展背景页面中访问它时(单击浏览器操作后)它将返回null。

扩展名1 contentscript.js

embeded.addEventListener
(
 "message",
 function(message)
 {
  localStorage.setItem("pdf", message.data);
  loadPDF(message.data);
 },
 false
);

extension 2 background.js

chrome.browserAction.onClicked.addListener(function(tab) {
  if (tab.url.substr(tab.url.length - 4) === ".pdf")
  {    
    if (localStorage.getItem("pdf") !== null)
    {
      alert("boomy"); 
    }
  }
});

1 个答案:

答案 0 :(得分:2)

localStorage在扩展程序页面(后台,选项,弹出窗口)之间共享,但不是内容脚本。 并且肯定不会在2个扩展程序之间共享!

你有两个半选项。有2个独立的扩展名,只有一个选项。


选项一:依赖消息传递。

当您需要在后台和内容脚本之间传递一些值时,您可以通过消息传递来实现。如果您只需要向一个方向传递它,那就特别有效。

contentscript.js:

embeded.addEventListener(
  "message",
  function(message)
  {
    chrome.runtime.sendMessage(extensionTwoId, {pdf: message.data});
    loadPDF(message.data);
  },
  false
);

background.js:

chrome.runtime.onMessageExternal.addListener(
  function(message, sender, sendResponse) {
    if(sender.id !== extenstionOneId) return;
    if(message.pdf) localStorage.setItem("pdf", message.pdf);
  }
);

/* ... */

选项二:chrome.storage 两种扩展名之间不适用。