Google chrome extension Chrome tabs查询返回空选项卡数组

Google chrome extension Chrome tabs查询返回空选项卡数组,google-chrome-extension,firefox-addon-webextensions,Google Chrome Extension,Firefox Addon Webextensions,我正在尝试将我在Firefox中使用的一个Web扩展移植到chrome,我遇到了一些问题。我需要从后台脚本向内容脚本发送消息。当我第一次从Firefox构建它时,我正在使用一个端口,但我将它切换到使用chrome.tabs.query(),因为chrome一直在查找错误。但是现在使用query(),它在Firefox中仍然可以正常工作,但是现在chrome说它找不到当前选项卡: Error handling response: TypeError: Cannot read property 'i

我正在尝试将我在Firefox中使用的一个Web扩展移植到chrome,我遇到了一些问题。我需要从后台脚本向内容脚本发送消息。当我第一次从Firefox构建它时,我正在使用一个端口,但我将它切换到使用
chrome.tabs.query()
,因为chrome一直在查找错误。但是现在使用
query()
,它在Firefox中仍然可以正常工作,但是现在chrome说它找不到当前选项卡:

Error handling response: TypeError: Cannot read property 'id' of undefined
    at chrome-extension://hhfioopideeaaehgbpehkmjjhghmaaha/DubedAniDL_background.js:169:11
它返回tab参数pass为length==0<代码>控制台日志(选项卡):

这就是Chrome抱怨的功能


var browser=chrome;//我设置这个只是为了与chrome兼容;在Firefox中没有设置。
函数sendToTab(thing){
browser.tabs.query(
{active:true,currentWindow:true},
功能(选项卡){
控制台日志(选项卡);
browser.tabs.sendMessage(
制表符[0]。id,//检查程序在此行中识别错误
事情
);
}
);
}
同样的功能在Firefox中也可以正常工作,并且在访问该选项卡时没有问题。但它在Chrome中不起作用

更新2020-01-30 @wOxxOm:

显示调用sendToTab的代码

这就是sendToTab的调用位置:

函数日志URL(请求详细信息){
var l=requestDetails.url;
如果(包括(测试url)){
如果(登录){console.log(l);}
sendToTab({dl_url:l});
}
}
browser.webRequest.onBeforeRequest.addListener(
logURL,
{URL:[“”]}
);

听起来好像您在运行此代码,而您的活动窗口是devtools,这是一个

代码中还存在另一个问题:它总是访问聚焦(活动)选项卡,即使请求可能发生在后台(非活动)选项卡中

解决方案:

将侦听器中提供的选项卡id用作
tabId
属性。
在您的情况下是
requestDetails.tabId

如果出于任何原因确实需要“活动”选项卡,请确保此代码运行时实际窗口处于活动状态,或者使用以下解决方法,即使devtools窗口处于焦点状态,也会成功:

chrome.windows.getCurrent(w=>{
query({active:true,windowId:w.id},tabs=>{
常量tabId=tabs[0].id;
//在这里使用tabId。。。
});
});

@wOxxOm我两个都打开了。我尝试关闭所有开发人员的东西,只在扩展应该运行的页面上运行,但我仍然有一个问题。重新加载后,扩展仍无法正确通信。我想我必须重新组织脚本,使内容脚本始终启动与背景的联系。@wOxxOm我刚刚在问题中添加了sendToTab。
[]