我已经看到很多问题,所有问题都与背景页面到内容脚本有关。
摘要
我的扩展程序有一个选项页面和一个内容脚本。内容脚本处理存储功能(chrome.storage
操作)。
每当用户更改选项页面中的设置时,我都想向内容脚本发送一条消息以存储新数据。
我的代码:
options.js
var data = "abcd"; // let data
chrome.tabs.query({ active: true, currentWindow: true }, function (tabs) {
chrome.tabs.sendMessage(tabs[0].id, "storeData:" + data, function(response){
console.log(response); // gives undefined :(
});
});
内容脚本js
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
// not working
});
我的问题:
为什么这种方法不起作用?
此程序还有其他(更好)的方法吗?
最佳答案
1)为什么这种方法不起作用?
您正在尝试发消息:chrome.tabs.query({ active: true, currentWindow: true }, ...);
返回您正在执行操作的选项页
2)此程序是否还有其他(更好)的方法。
这取决于您要发送消息的页面。您可以只向所有页面发送消息:使用空过滤器查询并遍历结果。
您可以使用内容脚本来跟踪上一个活动选项卡,但这听起来过于复杂。
或者,您可以使用以下事实:对chrome.storage
所做的更改会在所有扩展上下文中生成onChanged
事件。如果修改保存在chrome.storage
中的选项,则内容脚本可以侦听onChanged
事件并根据需要重新处理其数据,这样您就可以完全跳过消息传递。