更新现有 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 已被弃用。