使用 javascript 的后台脚本消息传递



我在Google Chrome扩展程序中搞砸了交流,并使用以下指南:https://developer.chrome.com/extensions/messaging

它曾经工作过,但我遇到了一个错误:

响应选项卡时出错。查询:类型错误:无法读取属性"id" 未定义

比较了我的代码和谷歌浏览器代码,我似乎找不到为什么我的代码会产生这个错误:

chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
                chrome.tabs.sendMessage(tabs[1].id, {fen: request.needMove}, function(response) {
                    //console.log(response.farewell);
                });
            });

这是我将其发送到的地方:

chrome.runtime.onMessage.addListener(
  function(request, sender, sendResponse) {
    console.log("recv FEN : " + FEN);
   FEN = request.fen;
   setCookie("FEN_SET", "true" , 1);
   setFEN(FEN);
  });

无法修复该错误,无论我尝试什么,它都保持不变。"无法读取未定义的属性"意味着据我所知,"选项卡"是未定义的,但我不明白为什么它在 Google 示例中有效,而这里它没有。

另一个Q :

如果我尝试将其发送到选项卡[1],这是否意味着它是第二个位置的选项卡,还是我解释错误?

>tabs 是通过过滤器的所有选项卡(无论位置如何)的列表。

您的查询是{active: true, currentWindow: true}的,所以通常它应该只有 1 个选项卡(因为最多有 1 个当前窗口,正好有 1 个活动选项卡)。

所以你需要第一个元素,即 tabs[0] .

此查询将始终未定义tabs[1]


过去,tabs为空的情况非常

罕见(Chrome 在没有打开窗口的情况下在后台运行)。

但是,对于最近的更改,API 将不会返回"开发工具"选项卡。因此,如果你正在调试扩展,并且"开发工具"窗口已打开并聚焦,则数组将为空。您应该检查一下。

相关内容

  • 没有找到相关文章

最新更新