如何在扩展后台页面访问localStorage

How to access localStorage in extension background page?

本文关键字:访问 localStorage 后台 扩展      更新时间:2023-09-26

我有一个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"); 
    }
  }
});

localStorage在扩展页面(背景,选项,弹出)之间共享,但不是内容脚本。并且肯定不会在两个扩展之间共享!

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


选项一:依赖消息传递

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

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 .不适用于两个扩展