Chrome扩展程序 - 写入其他域的本地存储

时间:2013-03-08 07:13:37

标签: javascript google-chrome-extension local-storage

如何写入其他域的本地存储。我的想法是我需要我的chrome扩展程序在本地存储中写入内容,当用户访问相关网站时,站点站点可以读取本地存储的内容。我试图在用户的个人数据之间进行同步,而不必将它们存储在服务器中。

2 个答案:

答案 0 :(得分:7)

Content scripts直接访问网页的localStorage。

如果要存储特定域的值,只需打开一个窗口或框架,然后写入窗口/页面的本地存储。

  1. 选择您喜欢的选项以激活页面:

    • chrome.tabs.create创建一个非活动选项卡,可能位于使用chrome.tabs.query找到的非活动窗口中。
    • 实验offscreenTabs API(实验性的,因此尚未准备好在生产中使用)。查看我在SO上发布的一些examples
    • 创建一个IFrame并将其插入当前页面。
    • window.open(不推荐......)

    当您决定打开一个页面时,选择一个重量轻的页面。 /robots.txt通常是一个不错的选择:它存在于大多数网站上,它是纯文本文件。

  2. 激活页面的内容脚本。您可以使用清单文件并使用messaging API,也可以添加回调到chrome.tabs.create方法,该方法以编程方式插入内容脚本(chrome.tabs.executeScript)。

    < / LI>

    这是一个简单的例子。它需要tabs API,因为我正在使用chrome.tabs.executeScript。此外,您还要将要访问的源添加到权限列表中。

    chrome.tabs.create({
        active: false,
        url: 'http://stackoveflow.com/robots.txt'
    }, function(tab) {
        chrome.tabs.executeScript(tab.id, {
            code: 'localStorage.setItem("key", "value");'
        }, function() {
            chrome.tabs.remove(tab.id);
        });
    });
    

答案 1 :(得分:2)

我认为这样做的唯一解决方案是通过脚本注入,因为跨域限制。

var s = document.createElement('script');
s.src = chrome.extension.getURL("script.js");
s.onload = function() {
    this.parentNode.removeChild(this);
};
(document.head||document.documentElement).appendChild(s);

将文件script.js添加到访问其他网站localStorage的扩展程序中,您必须在清单文件中将“{1}}添加到”web_accessible_resources“。

请注意,脚本在完全加载后会自动删除,因此请确保您要执行的代码包含在自执行函数中。