我正在尝试开发Chrome扩展程序。 在框扩展中,我允许用户存储变量(如URL)。 然后,在脚本处于活动状态的页面中,我必须检索此值。
实施例
Chrome扩展程序:
localStorage.setItem(“url”,$(“#url”)。val());
Domain.net (如facebook.com)
var my_url = localStorage.getItem(“url”);
但是localStorage不允许跨域。不回复我说使用GlobalStorage,已被弃用。
答案 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。