我正在尝试开发 Chrome 扩展程序。在框扩展中,我允许用户存储变量(如 URL)。然后,在脚本处于活动状态的页面中,我必须检索这个值。
例子
铬扩展:
localStorage.setItem("url", $("#url").val());
Domain.net(如 facebook.com)
var my_url = localStorage.getItem("url");
但是 localStorage 不允许跨域。不要回复我说使用 GlobalStorage,已弃用。
我正在尝试开发 Chrome 扩展程序。在框扩展中,我允许用户存储变量(如 URL)。然后,在脚本处于活动状态的页面中,我必须检索这个值。
例子
铬扩展:
localStorage.setItem("url", $("#url").val());
Domain.net(如 facebook.com)
var my_url = localStorage.getItem("url");
但是 localStorage 不允许跨域。不要回复我说使用 GlobalStorage,已弃用。
您可以只使用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);
});
}
});
您必须将数据保存到将要获取的域中的 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 的信号。