2009-12-30 8 views

risposta

64

Un amico risponde alla mia domanda.

In primo luogo, devi impostare le autorizzazioni per la scheda API:

"permissions": [ 
    "tabs" 
] 

E per memorizzare l'URL:

chrome.tabs.getSelected(null,function(tab) { 
    var tablink = tab.url; 
}); 
+0

La seconda parte del codice è per il caso di un file popup – Axiol

+1

Il motivo per cui è solo per il popup (azione della pagina, azione del browser) è perché l'invio di un "null" nel primo parametro. http://code.google.com/chrome/extensions/tabs.html#method-getSelected I documenti dichiarano che il primo parametro è windowId, se si desidera utilizzarlo nelle opzioni o nella pagina di sfondo, è necessario per inserire l'id della finestra o si otterrà la scheda corrente la visualizzazione che non è definita, le opzioni rispettivamente. –

+1

sì, funziona, ma non sono sicuro del perché il metodo chrome.tabs.getSelected non sia stato trovato nel documento di riferimento. – swimmingfisher

2

Hi qui è un campione di Google Chrome, che messaggi di posta elettronica del sito corrente ad un amico L'idea di base che sta dietro è ciò che vuoi ... prima di tutto recupera il contenuto della pagina (non interessa per te) ... in seguito ottiene l'URL (< - buona parte)

Inoltre è un bel esempio di codice funzionante, che preferisco sfuggendo alla lettura dei documenti.

può essere trovato qui: Email this page

24

Il problema è che chrome.tabs.getSelected è asincrona. Questo codice di seguito generalmente non funzionerà come previsto. Il valore di 'tablink' sarà ancora indefinito quando è scritto nella console perché getSelected non ha ancora invocato la callback che azzera il valore:

var tablink; 
chrome.tabs.getSelected(null,function(tab) { 
    tablink = tab.url; 
}); 
console.log(tablink); 

La soluzione è quella di avvolgere il codice in cui si prevede di utilizzare il valore in una funzione e avere invocato da getSelected. In questo modo è garantito avere sempre un valore impostato, poiché il codice dovrà attendere il valore da fornire prima che venga eseguito.

provare qualcosa di simile:

chrome.tabs.getSelected(null, function(tab) { 
    myFunction(tab.url); 
}); 

function myFunction(tablink) { 
    // do stuff here 
    console.log(tablink); 
} 
+0

Grazie per il codice, questo ha funzionato per me, "schede" deve essere aggiunto alle autorizzazioni nel file manifest.json "permessi": [ "schede" ] –

+0

Anche questo funziona come un fascino: [Ottenere la finestra corrente su un popup (estensione google chrome)] (http://stackoverflow.com/questions/3030738/getting-current-window-on-a-popup-google-chrome-extension) – chemark

+0

E come ottenere link di tutte le schede aperte – Enve

118

Update: Il metodo chrome.tabs.getSelected() è ora sconsigliato.

Il modo consigliato per ottenere l'URL della scheda corrente è utilizzare chrome.tabs.query().

Un esempio d'uso:

chrome.tabs.query({'active': true, 'lastFocusedWindow': true}, function (tabs) { 
    var url = tabs[0].url; 
}); 

Ciò richiede che si richiede l'accesso al chrome.tabs API nel extension manifest:

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

E 'importante notare che la definizione del "scheda corrente" potrebbe differire in base alle esigenze della tua estensione.

L'impostazione lastFocusedWindow: true nella query è appropriata quando si desidera accedere alla scheda corrente nella finestra focalizzata dell'utente (in genere la finestra più in alto).

L'impostazione currentWindow: true consente di ottenere la scheda corrente nella finestra in cui è in esecuzione il codice dell'interno. Ad esempio, ciò potrebbe essere utile se la tua estensione crea una nuova finestra/popup (cambiando lo stato attivo), ma desidera comunque accedere alle informazioni della scheda dalla finestra in cui è stata eseguita l'estensione.

Ho scelto di utilizzare lastFocusedWindow: true in questo esempio, perché Google chiama casi in cui currentWindowmay not always be present.

Siete liberi di affinare ulteriormente la query scheda utilizzando una qualsiasi delle proprietà definite qui: chrome.tabs.query

+13

Perché l'URL è sempre indefinito? – nnm

+0

Se l'URL non è definito, prova a ricaricare l'estensione da chrome: // extensions Ciò ricaricherà la configurazione dell'estensione e applicherà l'autorizzazione "schede" appena aggiunta. L'URL – flashbackzoo

+1

non è definito perché http://stackoverflow.com/questions/28786723/why-doesnt-chrome-tabs-query-return-the-tabs-url-when-called-using-requirejs (risposta: chiudi la finestra degli strumenti dev o passare a Window corrente invece di lastFocusedWindow) – kspearrin

-1

Bisogna controllare this.

HTML

<button id="saveActionId"> Save </button> 

manifest.json

"permissions": [ 
    "activeTab", 
    "tabs" 
    ] 

JavaScript
Il codice qui sotto salverà tutti gli URL di finestra attiva in oggetto JSON come parte del pulsante clic.

+0

La mia estensione di Chrome per il salvataggio degli URL nelle finestre attive è https://chrome.google.com/webstore/detail/tabstore-plugin/jngplpdonggccbjlmbphlbancacmpmpp –

14

Altre risposte presuppongono che vogliate conoscerlo da un popup o da uno script in background.

Nel caso in cui si desidera conoscere l'URL corrente da uno script contenuti, il modo standard JS applica:

window.location.toString() 

È possibile utilizzare le proprietà di window.location per accedere le singole parti del URL, come ospite , protocollo o percorso.

+0

thumb up, la soluzione più semplice. – dalvarezmartinez1

+0

Ottima risposta. Tutto quello che volevo era 'window.location.host' per vedere se sono in" stackoverflow.com "o no. – Salyangoz

Problemi correlati