Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.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)_Javascript_Google Chrome_Google Chrome Extension_Tabs - Fatal编程技术网

Javascript 更改活动窗口(chrome.tabs)

Javascript 更改活动窗口(chrome.tabs),javascript,google-chrome,google-chrome-extension,tabs,Javascript,Google Chrome,Google Chrome Extension,Tabs,我为pandora.com做了一个扩展,当用户点击扩展图标时,它会打开一个新的pandora标签 当pandora已经在新选项卡中打开,并且用户单击扩展时,扩展将不会打开新选项卡,但我希望它将活动选项卡更改为pandora已经打开的选项卡 这是迄今为止我在背景页面中看到的内容: chrome.browserAction.onClicked.addListener(function(tab) { var found = false; chrome.tabs.query({}, fu

我为pandora.com做了一个扩展,当用户点击扩展图标时,它会打开一个新的pandora标签

当pandora已经在新选项卡中打开,并且用户单击扩展时,扩展将不会打开新选项卡,但我希望它将活动选项卡更改为pandora已经打开的选项卡

这是迄今为止我在<代码>背景页面中看到的内容:

chrome.browserAction.onClicked.addListener(function(tab) {
    var found = false;
    chrome.tabs.query({}, function (tabs) {
        for (var i = 0; i < tabs.length; i++) {
            if (tabs[i].url.search("pandora.com") > -1){
                found= true; 
            }
        }
        if (found==false){
            chrome.tabs.executeScript(null,{file: "buy.js"});
        } else {
             // Changes active tab to the tab with pandora open
        }
    });
});
chrome.browserAction.onClicked.addListener(函数(选项卡){
var=false;
chrome.tabs.query({},函数(tabs){
对于(变量i=0;i-1){
发现=真;
}
}
if(found==false){
executeScript(null,{file:“buy.js”});
}否则{
//将活动选项卡更改为打开pandora的选项卡
}
});
});

UPDATE-
chrome.tabs.UPDATE(tabId,{selected:true})实现了我所需要的。以下是最终代码:

chrome.browserAction.onClicked.addListener(function(tab) {
    var found = false;
    var tabId;
    chrome.tabs.query({}, function (tabs) {
        for (var i = 0; i < tabs.length; i++) {
            if (tabs[i].url.search("www.pandora.com/") > -1){
                found = true;
                tabId = tabs[i].id;
            }
        }
        if (found == false){
            chrome.tabs.executeScript(null,{file: "buy.js"});
        } else {
            chrome.tabs.update(tabId, {selected: true});
        }
    });
});
chrome.browserAction.onClicked.addListener(函数(选项卡){
var=false;
塔比德变种;
chrome.tabs.query({},函数(tabs){
对于(变量i=0;i-1){
发现=真;
tabId=tabs[i].id;
}
}
if(found==false){
executeScript(null,{file:“buy.js”});
}否则{
更新(tabId,{selected:true});
}
});
});

似乎
chrome.tabs.update
的第二个参数的
selected
属性现在已被弃用

使用
active
属性是执行此操作的新方法:

chrome.tabs.update(tabId, {active: true})
如果要激活的选项卡位于另一个窗口中,您还需要使用
chrome.windows.update
将活动窗口更改为该窗口:

chrome.windows.update(windowId, {focused: true}, (window) => {
  chrome.tabs.update(tabId, {active: true})
})

您应该使用
indexOf
而不是
search
String#search
用于正则表达式,您的代码不必要地从字符串隐式创建正则表达式。它应该不会对输出产生影响,但它更适合您的用例(而且速度稍快)。@Fabricio Matté感谢您的建议,但是您是否知道如何解决我的主要问题(更改活动窗口)?查看此答案:在出现正则表达式语法错误之前,我可能会通过
indexOf
切换
search
,但是的。