Как проверить, открыта ли уже определенная страница в Google Chrome? - PullRequest
9 голосов
/ 08 декабря 2010

По сути, у меня есть упакованное веб-приложение, которое я хотел бы проверить при загрузке, есть ли какие-либо другие экземпляры открытого веб-приложения, и, если это так, скорее переключиться на открытый экземпляр. чем создать еще один.

Кроме того, для страницы параметров я бы хотел, чтобы она могла проверять, открыто ли приложение, и, если да, обновлять страницу приложения, если страница параметров была изменена.

Я читал документацию о модуле JavaScript chrome.tabs, но я не могу понять, как заставить функцию искать конкретную вкладку. Я не совсем понимаю, как искать или устанавливать идентификатор вкладки для конкретной вкладки. Я думаю, что это то, что я хочу делать, но если я лаю не на том дереве, пожалуйста, дайте мне знать.

Если бы кто-нибудь здесь мог объяснить это лучше для меня, я был бы очень благодарен.

Ответы [ 5 ]

7 голосов
/ 08 декабря 2010

Загляните внутрь расширения Google Mail Checker , которое обладает следующими функциями:

function goToInbox() {
  chrome.tabs.getAllInWindow(undefined, function(tabs) {
    for (var i = 0, tab; tab = tabs[i]; i++) {
      if (tab.url && isGmailUrl(tab.url)) {
        chrome.tabs.update(tab.id, {selected: true});
        return;
      }
    }
    chrome.tabs.create({url: getGmailUrl()});
  });
}

В частности, вы передаете getAllInWindow windowId (или неопределенный для текущего окна) и функцию, который получает массив объектов Tab.Вы не изменяете свойства вкладки напрямую;вместо этого вы передаете его идентификатор функции обновления, чтобы манипулировать им.

3 голосов
/ 17 ноября 2012

Чтобы заставить ответ Джоша Ли работать с манифестом версии 2, вы должны добавить разрешение на вкладки в файле manifest.json:

...
"permissions": [
    "tabs"
]
...

Понятия не имею, как такая конструкция повышает безопасность«в сеть ...

1 голос
/ 16 ноября 2015

Надеюсь, это поможет новичкам!

С дополнительным ответом #Josh Lee.

function openMyTab(mURL) {          

    if(!mURL){
       console.log("No url passed");
       return;
    }
  chrome.tabs.getAllInWindow(undefined, function(tabs) {
    for (var i = 0;i<tabs.length; i++) {

// remove (tabs[i].url.indexOf(mURL)!=-1) and 
// use tabs[i].url===url if you want exact match below

      if (tabs[i].url && (tabs[i].url.indexOf(mURL)!=-1)) {

        console.log("URL Match found",tabs[i].url);

        chrome.tabs.update(tabs[i].id, {url:url,selected: true});

        return;
      }
    }
     console.log("URL not found. Creating new tab");

    chrome.tabs.create({url: url});
  });
0 голосов
/ 02 марта 2019

Эти ответы полезны - они довольно старые и устаревшие.«getAllInWindow» и «selected» теперь устарели.Мой код также обновил вкладку, как первоначально просили.Мне нужно было проверить только внутренние страницы расширения, поэтому мой код выглядит так:

function goToInternalPage(targetURL) {
chrome.tabs.query({}, function(tabs) {
    for (let i = 0, tab; tab = tabs[i]; i++) {
        if (tab.url===("chrome-extension://"+ chrome.runtime.id + targetURL)) {
            chrome.tabs.reload(tab.id, {}, function(){});
            chrome.tabs.update(tab.id, {active: true});
            return;
        }
    }
    chrome.tabs.create({url: targetURL});
});

}

Общая версия будет выглядеть так:

function goToURL(targetURL) {
chrome.tabs.query({}, function(tabs) {
    for (let i = 0, tab; tab = tabs[i]; i++) {
        if (tab.url===targetURL) {
            chrome.tabs.reload(tab.id, {}, function(){});
            chrome.tabs.update(tab.id, {active: true});
            return;
        }
    }
    chrome.tabs.create({url: targetURL});
});

}

0 голосов
/ 07 июня 2017

На всякий случай, если кто-то планирует использовать приведенные выше примеры, опция «selected» устарела со времен Chrome 33, вместо нее используйте опцию «selected».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...