2012-11-13 19 views
23

Sto scrivendo un'estensione per Chrome e, in una parte, ho bisogno di ottenere il titolo e l'URL della scheda corrente quando si fa clic su un pulsante nella pagina popup.Estensione Chrome: ottieni la scheda corrente dal popup

Ho già lavorato con il sistema di trasmissione dei messaggi di Chrome e, dopo molti sforzi, sono riuscito a farlo funzionare, in molte occasioni. Tuttavia, non ho mai dovuto usarli con le pagine popup e, da quello che ho letto, è molto più difficile da fare.

La timeline Sono riuscito a capire finora è questo:

  1. popup.html/popup.js:     pulsante viene cliccato
  2. popup.html/popup.js:     Richiesta/messaggio viene inviato al contenuto script
  3. contentScript.js:                   Richiesta/messaggio viene ricevuto dalla pagina popup
  4. contentScript.js:                   Il titolo e l'URL della scheda corrente sono memorizzati in una variabile
  5. contentScript.js:                   Le 2 variabili vengono inviate come risposta rafforzata
  6. popup.html/popup.js:     Le 2 variabili sono analizzati dalla risposta

Di solito io sarei in grado di capire questo, ma, ho letto alcune cose che hanno gettato un bastone tra le ruote , ad esempio:

  • chrome.tabs.getSelected può essere utilizzato solo in una pagina di sfondo/script. Questo significa che gli script di contenuto non devono essere usati affatto?
  • I messaggi non possono essere inviati direttamente dallo script di contenuto alla pagina popup, devono passare attraverso una pagina di sfondo
  • Una finestra popup deve essere confermata come esistente prima che un messaggio possa essere passato ad esso (anche se, penso So come farlo)

Ho già trovato il sistema di passaggio dei messaggi di Chrome abbastanza difficile ma, questo mi ha totalmente confuso. Quindi, questo post.

risposta

-4

Non importa.

Risulta, è possibile utilizzare direttamente chrome.tabs.getSelected dalla finestra popup. Qualcuno ha mentito. ¬¬

+1

'cromato. tabs.getSelected' è deprecato (e anche non elencato in documenti) a favore di 'chrome.tabs.query'. Non sono sicuro che 'chrome.tabs.query' funzioni nelle pagine popup. – Stan

+0

Avete suggerimenti sull'utilizzo? – mythofechelon

+1

Puoi continuare a usare 'getSelected' finché non è supportato, o testare se' query' funziona, specialmente con manifest versione 2 (la versione 1 verrà interrotta l'anno prossimo). Come ultima risorsa, puoi ascoltare le schede di Chrome 'onCreated',' onActivated' nella tua pagina di sfondo, salvare la scheda attiva in una variabile e restituirla, ad esempio, in un metodo chiamato 'getCurrentTab', e quindi richiamarla dal popup proprio come che: 'chrome.extension.getBackgroundPage(). getCurrentTab()'. La query – Stan

50

chrome.tabs.getSelected obsoleto. Dovresti usare invece chrome.tabs.query.

chrome.tabs.query richiede due parametri: un oggetto query e una funzione di callback che prende come parametro un array di schede risultanti.

È possibile ottenere la "scheda corrente" interrogando tutte le schede attualmente attive e presenti nella finestra corrente.

var query = { active: true, currentWindow: true }; 

Dal momento che la query restituirà un array di scheda che contiene la scheda corrente da solo, essere sicuri di prendere il primo elemento della richiamata

function callback(tabs) { 
    var currentTab = tabs[0]; // there will be only one in this array 
    console.log(currentTab); // also has properties like currentTab.id 
} 

Et voilà:

chrome.tabs.query(query, callback); 
+0

questa dovrebbe essere la risposta accettata – andrhamm

+0

Grazie per questo suggerimento ... Stavo cercando di ottenere l'url della finestra popup. Ho dovuto impostare un timeout ... Trovo che sto usando timeout molto quando le pagine si stanno caricando e sto cercando di ottenere le informazioni sulla pagina. – denikov

+0

Se si desidera utilizzare la proprietà currentTab.url, è necessario includere l'autorizzazione url in manifest.json i.e. "autorizzazioni": ["schede", ...] ' –

Problemi correlati