将变量存储在Chrome扩展程序(域1)中,但我需要它在远程域(域2)中

时间:2013-04-29 21:24:33

标签: javascript jquery google-chrome-extension

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

实施例

Chrome扩展程序:

localStorage.setItem(“url”,$(“#url”)。val());

Domain.net (如facebook.com)

var my_url = localStorage.getItem(“url”);

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

2 个答案:

答案 0 :(得分: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);
});

<强> Background.js

chrome.runtime.onMessage.addListener(function(message, sender, sendResponse){
  if(message.method == "getUrl"){
    chrome.storage.local.get('urlData',function(items){
      sendResponse(items.urlData);
    });
  }
});

答案 1 :(得分:0)

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

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

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

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。