Javascript chrome.tabs.highlight突然不工作
我已经构建了一个Chrome扩展,它在一个单独的选项卡中创建了一个额外的本地页面(大约:基于空白),其中包含一个与运行扩展脚本的主页相关的数据表。此表的一个功能是,它包含的链接在单击时应将焦点更改回主页选项卡,同时更改主页选项卡的URL。我使用了chrome tabs API中的Javascript chrome.tabs.highlight突然不工作,javascript,google-chrome,google-chrome-extension,Javascript,Google Chrome,Google Chrome Extension,我已经构建了一个Chrome扩展,它在一个单独的选项卡中创建了一个额外的本地页面(大约:基于空白),其中包含一个与运行扩展脚本的主页相关的数据表。此表的一个功能是,它包含的链接在单击时应将焦点更改回主页选项卡,同时更改主页选项卡的URL。我使用了chrome tabs API中的chrome.tabs.highlight函数和background.js脚本来更改焦点 自从今年春天我开发了这个函数以来,它一直工作得很好。今天我注意到,尽管单击链接时主页选项卡的位置发生了变化,但焦点不再转移。chr
chrome.tabs.highlight
函数和background.js
脚本来更改焦点
自从今年春天我开发了这个函数以来,它一直工作得很好。今天我注意到,尽管单击链接时主页选项卡的位置发生了变化,但焦点不再转移。chrome tabs API的内部工作方式最近是否有任何改变?Mac当前的Chrome版本是76.0.3809.132,我的操作系统是10.13.6
使用警报命令(请参阅代码),我可以验证有关选项卡索引的信息在background.js
和content.js
之间是否正常传递
“选项卡”也包含在manifest.json
文件的权限中
下面是相关代码的摘要。
请注意,使用了属性“goto”而不是“href”;这是出于技术上的原因,我认为这些原因与此无关
//background.js:
var replyObject = {};
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
switch(request.command){
case "changeTab":
var toTab = request.data;
chrome.tabs.highlight({tabs:toTab});
//alert("totab: " + toTab);
break;
case "getTabIndex":
chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
var currTab = tabs[0].index;
if (currTab) {
replyObject = {type:"tabIdIs",data:currTab};
//alert("currTab: " + currTab);
}
});
break;
};
sendResponse(replyObject);
});
//===================
//content.js:
//getting tab index info:
chrome.runtime.sendMessage({command:"getTabIndex"},function(reply){
if(reply.data != undefined){
mainTab = reply.data;
}
});
//changing tab:
$(sumBody).on("click","a.qlink",function(){
var sendObj = {command:"changeTab",data:mainTab};
window.location.href = $(this).attr("goto");
chrome.runtime.sendMessage(sendObj);//visa Inspera-fliken
});
1) sendResponse将始终发送错误/空的replyObject,因为query()是异步的,并且在外部代码完成后运行,要修复它,您需要在onMessage侦听器的结尾处
返回true
,并在query()的回调中移动sendResponse。2)我将在sendMessage()之后移动window.location.href
行刚刚进来case@wOxxOm:(1)由于某种原因,replyObject确实通过插入警报(JSON.stringify(reply))得到了正常的传递第一个sendMessage函数(“getting tab index info:”)中的代码>行,它生成消息{“type”:“tabIdIs”,“data”:1}
。向侦听器添加return true
不会改变任何内容。我还尝试将sendResponse
移动到条件if(currTab){
内部或外部。这两种情况下都没有纠正问题。(2)移动window.location.href
行也没有改变任何东西。异步JS不像您描述的那样工作-根据规范-所以我猜这里还有其他一些因素。无论如何,我不能不亲自检查实际的扩展。甚至可能是Chrome中的一个bug,您可以通过运行portabl来验证e Chrome或Chrome的旧版本。更正我以前的评论并替换一个现在已删除的评论:在清理了原始代码的其他部分后,遵循wOxxOm的建议现在给出了所需的结果。但仍然不清楚为什么它会更早工作。可能是Chrome bug已被删除。