我有以下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翻译页面上发送要翻译的文本,我希望每次用户在同一个窗口的标签页中使用它时都会打开。
答案 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
文件中的标签,以防您想要访问url
,title
或favIconUrl
tabs
的属性。
"permissions": ["contextMenus", "tabs"],