更新现有 Chrome 选项卡而不是打开新选项卡
Updating an existing Chrome tab instead of opening a new one
我创建了一个 Chrome 扩展,它在选择文本时使用所选文本向 Salesforce 提供上下文菜单 link:
function doSearch (search_target, tab)
{
chrome.tabs.create( {
url : "https://my.salesforce.com/apex/BR_caseRedirectDependingLicense?number="+search_target.replace(/\D/g,''),
selected : true,
index : tab.index + 1
} );
}
function selectionHandler (info, tab)
{
doSearch( info.selectionText, tab );
}
function resetContextMenus ()
{
chrome.contextMenus.removeAll(
function()
{
var id = chrome.contextMenus.create( {
title: "Open in Salesforce",
contexts: [ "selection" ],
onclick: selectionHandler
} );
}
);
}
resetContextMenus();
这里的用意是标记票号,顺丰快速打开,完美运行。
但是,我想知道是否可以更新打开的 salesforce 选项卡而不是每次都启动一个新选项卡。
我尝试环顾四周并遇到了以下示例扩展:
https://chromium.googlesource.com/chromium/src/+/master/chrome/common/extensions/docs/examples/api/tabs/inspector/
但它似乎根本不起作用(可能是因为它已经过时了)。
我非常感谢 help/guidance 如何解决这个问题。
是的,你可以做到这一点,你可以使用 chrome.tabs.update(..)
函数来做到这一点,这是一个例子,这将更新你的上下文菜单项被点击的选项卡:
function selectionHandler (info, tab) {
chrome.tabs.update(tab.id, {
url : "https://my.salesforce.com/apex/BR_caseRedirectDependingLicense?number="+info.selectionText.replace(/\D/g,''),
active : true
});
}
如果你想先创建一个新标签然后不断更新它,你可以使用这样的东西:
let tabId = -1;
function doSearch (search_target, tab)
{
const tabDetails = {
url : "https://my.salesforce.com/apex/BR_caseRedirectDependingLicense?number="+search_target.replace(/\D/g,''),
active : true,
index : tab.index + 1
};
if (tabId == -1) {
chrome.tabs.create(tabDetails, tab => {
tabId = tab.id;
});
} else {
// check if tab is still around
chrome.tabs.get(tabId, (tab) => {
if (tab) {
chrome.tabs.update(tab.id, tabDetails);
} else {
chrome.tabs.create(tabDetails, tab => {
tabId = tab.id;
});
}
});
}
}
Here is the chrome.tabs API documentation beside this two examples, you may also want to look into chrome.tabs.query(..)
,您可以使用它来查找特定的选项卡。`
此外,在所有这些示例中,我都使用了 active
而不是 selected
,因为 selected
已被弃用。
我创建了一个 Chrome 扩展,它在选择文本时使用所选文本向 Salesforce 提供上下文菜单 link:
function doSearch (search_target, tab)
{
chrome.tabs.create( {
url : "https://my.salesforce.com/apex/BR_caseRedirectDependingLicense?number="+search_target.replace(/\D/g,''),
selected : true,
index : tab.index + 1
} );
}
function selectionHandler (info, tab)
{
doSearch( info.selectionText, tab );
}
function resetContextMenus ()
{
chrome.contextMenus.removeAll(
function()
{
var id = chrome.contextMenus.create( {
title: "Open in Salesforce",
contexts: [ "selection" ],
onclick: selectionHandler
} );
}
);
}
resetContextMenus();
这里的用意是标记票号,顺丰快速打开,完美运行。
但是,我想知道是否可以更新打开的 salesforce 选项卡而不是每次都启动一个新选项卡。
我尝试环顾四周并遇到了以下示例扩展: https://chromium.googlesource.com/chromium/src/+/master/chrome/common/extensions/docs/examples/api/tabs/inspector/
但它似乎根本不起作用(可能是因为它已经过时了)。
我非常感谢 help/guidance 如何解决这个问题。
是的,你可以做到这一点,你可以使用 chrome.tabs.update(..)
函数来做到这一点,这是一个例子,这将更新你的上下文菜单项被点击的选项卡:
function selectionHandler (info, tab) {
chrome.tabs.update(tab.id, {
url : "https://my.salesforce.com/apex/BR_caseRedirectDependingLicense?number="+info.selectionText.replace(/\D/g,''),
active : true
});
}
如果你想先创建一个新标签然后不断更新它,你可以使用这样的东西:
let tabId = -1;
function doSearch (search_target, tab)
{
const tabDetails = {
url : "https://my.salesforce.com/apex/BR_caseRedirectDependingLicense?number="+search_target.replace(/\D/g,''),
active : true,
index : tab.index + 1
};
if (tabId == -1) {
chrome.tabs.create(tabDetails, tab => {
tabId = tab.id;
});
} else {
// check if tab is still around
chrome.tabs.get(tabId, (tab) => {
if (tab) {
chrome.tabs.update(tab.id, tabDetails);
} else {
chrome.tabs.create(tabDetails, tab => {
tabId = tab.id;
});
}
});
}
}
Here is the chrome.tabs API documentation beside this two examples, you may also want to look into chrome.tabs.query(..)
,您可以使用它来查找特定的选项卡。`
此外,在所有这些示例中,我都使用了 active
而不是 selected
,因为 selected
已被弃用。