Обновление существующей вкладки Chrome вместо открытия новой - PullRequest
0 голосов
/ 19 февраля 2020

Я создал расширение 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 вместо того, чтобы каждый раз запускать новую.

Я попытался осмотреться и столкнулся с следующий пример расширения: https://chromium.googlesource.com/chromium/src/+/master/chrome/common/extensions/docs/examples/api/tabs/inspector/

Но, похоже, он не работает вообще (возможно, потому что он устарел).

Я был бы очень признателен за любую помощь / руководство о том, как подойти к этому.

1 Ответ

0 голосов
/ 19 февраля 2020

Да, вы можете сделать это, вы можете сделать это, используя функцию 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;
            });
          }
        });
    }
}

Вот документация chrome .tabs API рядом с этими двумя примерами , вы также можете посмотреть chrome.tabs.query(..), вы можете использовать это, чтобы найти конкретную c вкладку.

Кроме того, во всех этих примерах я использовал active вместо selected, поскольку selected устарело.

...