我在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 将不会返回"开发工具"选项卡。因此,如果你正在调试扩展,并且"开发工具"窗口已打开并聚焦,则数组将为空。您应该检查一下。