这完全取决于您的 Chrome 扩展程序将做什么。window.localStorage 是 HTML5 存储。除非您在后台页面中运行它,否则它只能让您获取数据并将其设置到特定域的存储中。对于注入 DOM 的代码也是如此,因为它会使用网页上的 localStorage。
换句话说,除非您在后台页面中使用 localStorage,否则您将无法在不同的网页之间共享数据,该页面独立于网页运行,因为它具有 chrome:// URI 作为其域。
另一方面,chrome.storage.local 是为 Chrome 扩展程序和 Chrome 应用程序设计的,用于将数据存储在更中心的位置。由于普通网页无法访问,因此每个扩展都有自己的存储空间。一种可能性是您的背景页面处理数据的设置和获取,而您的内容脚本处理修改和与网页交互。
但是,这些 API 也可以在内容脚本中使用,而且我编写的两个扩展都使用从内容脚本调用的 chrome.storage.local。
例如,我构建了一个 Stack 应用程序,它在 Stack Exchange 中保留收件箱项目,直到您真正阅读它们,称为StackInbox。由于 Stack Exchange 站点跨越数百个域,因此我选择了 chrome.storage.local,因为我可以保存用户的 accountId 并在所有站点中重复使用它,确保收件箱数据同步,同时也可以直接在内容脚本中使用它。
作为一个简单的测试,将一些数据放在一个域的 localStorage 中的内容脚本中,然后尝试从另一个域中提取数据,您会发现数据不存在。使用 chrome.storage.local,这不是问题。
最后,Chrome 扩展程序和 Chrome 应用程序被列入白名单,因为用户选择安装它,所以他们通常可以做比普通网站更多的事情。例如,通过在清单中指定“unlimitedStorage”权限,您可以存储远远超过 HTML5 localStorage 的 5MB 限制的数据。
有关详细信息,请参阅Google 关于 Chrome 存储的文档。