2010-12-08 15 views
7

Im Grunde genommen habe ich eine gepackte Webanwendung, die ich überprüfen könnte, wie sie geladen wird, wenn andere Instanzen der Webanwendung geöffnet sind, und wenn ja, zu der offenen Instanz anstatt zu wechseln Erschaffe einen anderen.Wie kann überprüft werden, ob eine bestimmte Seite in Google Chrome bereits geöffnet ist?

Auch für die Optionen Seite, ich möchte es in der Lage zu überprüfen, ob die Anwendung geöffnet ist, und wenn ja, aktualisieren Sie die Anwendungsseite, wenn die Optionen Seite geändert wurde.

Ich habe die documentation über das JavaScript-Modul chrome.tabs gelesen, aber ich kann nicht herausfinden, wie die Funktion für eine bestimmte Registerkarte aussehen. Ich verstehe nicht ganz, wie man die Tab-ID für eine bestimmte Registerkarte sucht oder legt. Ich denke, das ist, wie man macht, was ich will, aber wenn ich den falschen Baum anbreche, lass es mich wissen.

Wenn jemand hier es besser für mich erklären kann, wäre ich sehr dankbar.

Antwort

7

Blick in der Google Mail Checker Erweiterung, die diese Funktionalität hat:

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()}); 
    }); 
} 

Insbesondere passieren Sie getAllInWindow die windowId (oder undefiniert für das aktuelle Fenster) und eine Funktion, die die Anordnung von Tab-Objekten erhält. Sie ändern die Eigenschaften der Registerkarte nicht direkt; Stattdessen übergeben Sie ihre ID an die Update-Funktion, um sie zu manipulieren.

+0

+1 Perfektes Beispiel – Kranu

+1

Das scheint die Registerkarte perfekt auszuwählen! Eine Frage: Wie kann ich dem Browser mitteilen, dass er die angegebene Registerkarte aktualisieren soll, anstatt zu der Google Mail Checker-Erweiterung zu wechseln? Und gibt es etwas wie getAllInWindow, das alle Fenster überprüft? –

+0

mit wenigen Änderungen funktioniert es perfekt !! :-) –

3

Um Josh Lee Antwort Arbeit mit der Version 2 manifest zu machen, müssen Sie die Berechtigung auf die Registerkarten in der manifest.json Datei hinzufügen:

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

ich keine Ahnung, wie diese Art der Konstruktion fügt ‚Sicherheit‘ zum Web ...

1

Hoffe es hilft den Anfängern!

Mit zusätzlich zu #Josh Lee die Antwort.

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

Nur für den Fall, dass jemand die oben genannten Beispiele verwenden möchte, die Option "Ausgewählt" ist seit Chrome 33 veraltet, verwenden Sie stattdessen die Option "Hervorgehoben".

Verwandte Themen