0

我正在尝试开发 Chrome 扩展程序。在框扩展中,我允许用户存储变量(如 URL)。然后,在脚本处于活动状态的页面中,我必须检索这个值。

例子

铬扩展:

localStorage.setItem("url", $("#url").val());

Domain.net(如 facebook.com)

var my_url = localStorage.getItem("url");

但是 localStorage 不允许跨域。不要回复我说使用 GlobalStorage,已弃用。

4

2 回答 2

1

您可以只使用storage API并将其与message passing. 您没有提到保存值的位置,所以我假设它在弹出窗口或类似的东西中。例如:

Popup.js

//Let's define urlData to be the url you obtained from the user
chrome.storage.local.set({'urlData':urlData});

然后您说您需要在页面中使用它,因此如果您将内容脚本注入该页面,您可以获得如下值:

内容脚本

chrome.runtime.sendMessage({method:'getUrl'},function(urlData){
  //do whatever you want with the urlData in here. I will just log it
  console.log(urlData);
});

背景.js

chrome.runtime.onMessage.addListener(function(message, sender, sendResponse){
  if(message.method == "getUrl"){
    chrome.storage.local.get('urlData',function(items){
      sendResponse(items.urlData);
    });
  }
});
于 2013-04-29T23:05:36.330 回答
0

您必须将数据保存到将要获取的域中的 localStorage。听起来您控制了该域,因此您可以使用该域上的简单 HTML 文件创建代理,称为 saver.html:

<html><script>
   localStrorage.url=decodeURIComponent(location.hash.slice(1));
</script></html>

要从其他站点/扩展保存,您创建一个指向该 html 文件的新 iframe,将数据连接为 url 的哈希段:

var theValue="this will be saved as 'url' in localStorage ",
 fr=document.createElement("iframe");
 fr.style.display='none';
 fr.src="http://mysite.com/saver.html#"+encodeURIComponent(theValue);
 document.body.appendChild(fr);

以这种方式,数据被传递到正确的域并保存到 localStorage。

如果需要,您可以在代理 html 页面中使用 top.sendMessage() 向您的应用程序发出数据已写入远程 localStorage 的信号。

于 2013-04-29T21:41:19.570 回答