Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.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选项卡,而不是打开新的_Javascript_Google Chrome_Google Chrome Extension_Google Chrome Devtools - Fatal编程技术网

Javascript 更新现有的Chrome选项卡,而不是打开新的

Javascript 更新现有的Chrome选项卡,而不是打开新的,javascript,google-chrome,google-chrome-extension,google-chrome-devtools,Javascript,Google Chrome,Google Chrome Extension,Google Chrome Devtools,我创建了一个Chrome扩展,在选择文本时,它会使用所选文本提供指向Salesforce的上下文菜单链接: function doSearch (search_target, tab) { chrome.tabs.create( { url : "https://my.salesforce.com/apex/BR_caseRedirectDependingLicense?number="+search_target.replace(/\D/g,''), s

我创建了一个Chrome扩展,在选择文本时,它会使用所选文本提供指向Salesforce的上下文菜单链接:

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();
这里的目的是标记车票号码并在SF中快速打开它们,而且它工作得非常完美

然而,我想知道是否有可能更新一个开放的salesforce标签,而不是每次都启动一个新的标签

我尝试四处查看,发现以下示例扩展:

但它似乎根本不起作用(可能是因为它过时了)


我非常感谢您提供有关如何处理此问题的任何帮助/指导。

是的,您可以这样做,您可以使用
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;
            });
          }
        });
    }
}
除了这两个示例之外,您可能还需要查看,您可以使用它来查找特定的选项卡`


此外,在所有这些示例中,我使用了
active
而不是
selected
,因为
selected
已被弃用。

^这将打开第一个选项卡,错误为:>未选中runtime。lastError:没有id为462的选项卡。附加链接无法打开,也无法刷新到该选项卡。@Joey以下哪个示例会产生该错误?如果是第二个,您是否包含了
chrome.tabs.get(tabId,…)
调用?该调用确保该选项卡仍然存在。错误消息表明您正在尝试更新一个不存在的选项卡,我看不出任何示例会产生该错误的原因。