Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript chrome.tabs.highlight突然不工作_Javascript_Google Chrome_Google Chrome Extension - Fatal编程技术网

Javascript chrome.tabs.highlight突然不工作

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扩展,它在一个单独的选项卡中创建了一个额外的本地页面(大约:基于空白),其中包含一个与运行扩展脚本的主页相关的数据表。此表的一个功能是,它包含的链接在单击时应将焦点更改回主页选项卡,同时更改主页选项卡的URL。我使用了chrome tabs API中的
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))得到了正常的传递行,它生成消息
{“type”:“tabIdIs”,“data”:1}
。向侦听器添加
return true
不会改变任何内容。我还尝试将
sendResponse
移动到条件
if(currTab){
内部或外部。这两种情况下都没有纠正问题。(2)移动
window.location.href
行也没有改变任何东西。异步JS不像您描述的那样工作-根据规范-所以我猜这里还有其他一些因素。无论如何,我不能不亲自检查实际的扩展。甚至可能是Chrome中的一个bug,您可以通过运行portabl来验证e Chrome或Chrome的旧版本。更正我以前的评论并替换一个现在已删除的评论:在清理了原始代码的其他部分后,遵循wOxxOm的建议现在给出了所需的结果。但仍然不清楚为什么它会更早工作。可能是Chrome bug已被删除。