创建的选项卡始终在同一选项卡中打开URL

时间:2014-03-18 20:58:43

标签: google-chrome google-chrome-extension

我有以下sample.js用于Google Chrome扩展程序,我想知道是否有办法让它每次都能在同一个标​​签页中打开网址:

function getword(info,tab) {    
    chrome.tabs.create({ 
        url: "http://translate.google.com/#en/ar/" + info.selectionText,
    })
}

chrome.contextMenus.create({
    title: "Translate: %s", 
    contexts:["selection"], 
    onclick: getword,

});

该扩展程序会在Google翻译页面上发送要翻译的文本,我希望每次用户在同一个窗口的标签页中使用它时都会打开。

3 个答案:

答案 0 :(得分:3)

我们使用一个变量来跟踪您是否创建了一个标签,并且一旦您使用chrome.tabs.update更新它而不是打开一个标签。我认为用户会发现这种体验令人困惑,因为有时候会打开一个新标签,有时却没有。如果用户已关闭您尝试更新的选项卡,则还必须处理错误情况。

var tabId = false;

if (tabId === false) {
    chrome.tabs.create({ 
        url: "http://translate.google.com/#en/ar/" + info.selectionText,
    }, function(tab) {
        tabId = tab.id;
    });
}  else {
    chrome.tabs.update(tabId, { 
        url: "http://translate.google.com/#en/ar/" + info.selectionText,
    });
}

答案 1 :(得分:1)

我有类似的要求,以避免为同一个网址打开多个标签。我还使用tabs.query来检查具有与新选项卡匹配的URL属性的选项卡是否已打开。如果是,那么我通过带有“是”的消息框通知用户。或者没有'按钮询问他是否要打开新选项卡或覆盖当前匹配选项卡。如果“是”'然后我tabs.update已打开的选项卡与新创建的选项卡的URL并关闭新选项卡。它有点cluggy但似乎工作。我最初发现tabs.query函数令人困惑但最终变得喜欢它。

在下面的代码中我做了一些略有不同的事情。我想知道浏览器是否打开了标题为“Agent Home'”的标签。如果是,那么我在使用新创建的选项卡的tab.url检索其tab.id后更新该选项卡。在另一种情况下,我检查是否包含" PAMM v4.0"在它的标题是开放的。如果是这样,我弹出一个消息框,然后关闭新创建的选项卡。我正在打开新标签但是将其设为tabs.inactive。

chrome.tabs.onCreated.addListener(function funcName (tabs) {
    var tabID = 0;
    var tabURL = "";
    var tabTitle = "";
    var length = 0;
    var HomeOrV4 = "";


    chrome.tabs.query({}, function(T){
    length = T.length;
        if(length >0){
            for(var i = 0; i<T.length; i++){
            tabTitle = T[i].title;
            tabID = T[i].id;
            tabURL = T[i].url;
            if(tabTitle == "PAMM - Agent Home"){
                HomeOrV4 = "Home";
            return; 
            }
            if(tabTitle == "PAMM v4.0"){
                HomeOrV4 = "V4";
            return;
            }
        }
        }
    }); 
    });

chrome.tabs.onUpdated.addListener(function(id, status){ 
    var V4tabID = 0;
    var V4TabURL = "";
    var AHPtabID = 0;
    if(status.status == "complete"){
            console.log("Tab loaded ");

chrome.tabs.query({title:"PAMM - Agent Home Page"}, function(Tabs){
    if(Tabs.length>1){
            Tabs.remove(Tabs[0].id);
    }
    if(Tabs.length = 1){
        AHPtabID = Tabs[0].id;
        //chrome.tabs.remove(V4tabID );                         
            }
    });     

chrome.tabs.query({title:"PAMM v4.0"}, function(Tabs){
    if(Tabs.length > 1){
        var r = confirm("You need to complete the open Guest Card. Press OK to continue   ...")
    if(r==true){
        chrome.tabs.update(Tabs[Tabs.length-1].id,{active:false});
       //chrome.tabs.remove(Tabs[Tabs.length-1].id);
       chrome.tabs.update(Tabs[0].id,{selected:true});
       }
        }

        if(Tabs.length == 1){
        tabID = Tabs[0].id;
        if (AHPtabID >0){
        chrome.tabs.remove(AHPtabID);
        }
    V4TabURL = Tabs[0].url;     }   
        });     

        }
    else{
        console.log("Tab loading");     
    }
});

答案 2 :(得分:-1)

除上述答案外,您还需要添加权限才能访问manifest文件中的标签,以防您想要访问urltitlefavIconUrl tabs的属性。

 "permissions": ["contextMenus", "tabs"],