我已经看到很多问题,所有问题都与背景页面到内容脚本有关。

摘要

我的扩展程序有一个选项页面和一个内容脚本。内容脚本处理存储功能(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事件并根据需要重新处理其数据,这样您就可以完全跳过消息传递。

10-06 15:40