我的扩展程序在我无法控制的现有网页上运行。我想要一个选项页面。我没想到的是如何从注入的代码中获取选项值。当然不会分享localStorage
。我已经尝试在两个方向上使用sendRequest / addListener,尽管将值从选项页面推送到注入的代码比将它们以其他方式推送更为可取。
一开始,我只是将操作页面上的选项复选框(注入代码的那个),这些复选框设置localStorage
中的值:
localStorage.showStuff = !!$(evt.target).attr(‘checked’);
然后我在代码中检查这些值:
if (localStorage.showStuff == ‘true’) { … }
我将复选框代码移动到选项页面,并在选项更改后执行sendRequest
,并且我的注入代码有一个侦听器,但它没有收到消息(我的背景)页面确实如此,但这对我没有帮助)。我也尝试将注入的代码交给选项页面,但sendResponse
对象似乎只在通知处理程序的持续时间内工作(这并不奇怪,但我不得不试一试)。
现在我的清单permissions
列出了外国网页("http://example.com/*"
)和“tab”
。
我知道我可以做的一件事是通过回调异步查询选项页面,但代码不会(并且实际上不能)异步工作而不会进行严格的重写。
欢迎任何和所有的想法,提前谢谢。
答案 0 :(得分:4)
我是Chrome扩展程序的新手,但当我尝试从后台脚本和选项页面编写/读取localstorage时,它运行得非常好。
我没有尝试过native localstorage,而是使用chrome的存储api。
看看这个
代码A :(设置)
chrome.storage.sync.set({'key':'qwe'});
代码B :(获取)
chrome.storage.sync.get('key', function(response) {
console.log(response); // 'qwe'
});
你可以将代码A放在后台,将代码B放在选项页面中,反之亦然。 他们使用相同的存储空间。
这对我有用。我希望你也能到达那里。答案 1 :(得分:1)
要记住的是,只有背景页才是长寿的。 Chrome扩展程序的其余部分是临时的(网站导航期间的内容脚本,打开时的选项页面等)。
因此,您必须使用消息传递并使用后台页面保存内容。但是,请准备好应该即将登陆的存储API。这会让事情变得更容易!
查看here。