2013-12-13 16 views
5

Voglio fare un'estensione semplice, che sta passando una variabile da sfondo a popup. Il problema è che ottengo una risposta "indefinita".Passare la variabile da sfondo a popup sull'estensione Chrome

Manifest:

{ 
    "name": "Get var", 
    "description": "get var", 
    "version": "2.0", 
    "permissions": [ 
    "activeTab" 
    ], 
    "background": { 
    "scripts": ["background.js"], 
    "persistent": true 
    }, 
    "browser_action": { 
    "default_title": "Get that variable", 
    "default_popup": "popup.html" 
    }, 
    "manifest_version": 2 
} 

background.js

var myURL = 'aaa'; 

popup.html

<!doctype html> 
<html> 
    <head> 
    <script src="popup.js"></script> 
    </head> 
    <body> 
    </body> 
</html> 

popup.js

document.addEventListener('DOMContentLoaded', function() { 
    var bg = chrome.extension.getBackgroundPage(); 
    var myURL = bg.myURL; 
    alert(myURL) 

}); 
+0

Provare 'window.myURL = 'aaa';' in background.js – rsanchez

risposta

-2

Infine ho trovato il problema, ho letto le pagine di sfondo bisogno di permesso di fondo per lavorare (chrome extension permissions documentation here). Così ho cambiato manifest come questo:

{ 
    "name": "Get var", 
    "description": "get var", 
    "version": "2.0", 
    "permissions": [ 
    "activeTab,background" 
    ], 
    "background": { 
    "scripts": ["background.js"], 
    "persistent": true 
    }, 
    "browser_action": { 
    "default_title": "Get that variable", 
    "default_popup": "popup.html" 
    }, 
    "manifest_version": 2 
} 
+3

Le pagine di sfondo certamente ** non ** hanno bisogno dell'autorizzazione di background per funzionare. L'autorizzazione per lo sfondo è per uno scopo molto diverso, come chiaramente indicato nella documentazione a cui ci si collega: _Quando qualsiasi app installata in hosting, app in pacchetto o estensione ha l'autorizzazione "in background", Chrome viene eseguito (invisibilmente) non appena l'utente registra nel loro computer, prima che l'utente avvii Chrome. L'autorizzazione per lo "sfondo" rende inoltre Chrome in esecuzione (anche dopo la chiusura dell'ultima finestra) finché l'utente non chiude esplicitamente Chrome._ – gkalpak

+1

BTW, se questo è ciò che volevi (in esecuzione in background), dovresti averlo menzionato nel tuo domanda per salvare te stesso (e noi stessi) un po 'di tempo;) – gkalpak

+0

Non ho cambiato nulla, ma ho aggiunto un permesso di sfondo e ha funzionato. Quello che volevo era farlo funzionare in qualche modo :) – Kuzgun

8

Il tuo codice (esattamente come lo hai pubblicato nella tua domanda) è corretto e dovrebbe funzionare correttamente. (Infatti, quando ho creato un'estensione di esempio utilizzando il codice che hai fornito, funzionava come previsto.)
Hai cambiato accidentalmente qualcosa durante la copia, incollando il codice attuale o c'è qualcos'altro che incasina le cose (qualcosa che hai lasciato fuori il tuo post).


proposito, vorrei suggerire esaminando event-pages (cioè non persistenti sfondo pagine), che sono più risorse-friendly. Tenete a mente, che il passaggio a un evento-page richiederebbe alcune modifiche in modo che il codice funzioni:

document.addEventListener('DOMContentLoaded', function() { 
    chrome.runtime.getBackgroundPage(function (bg) { 
     var myUrl = bg.myUrl; 
     alert(myUrl); 
    }); 
}); 

Nota: Io non implica in alcun modo che la ragione si riceve undefined è che usi una pagina di sfondo persistente. Il codice che hai postato dovrebbe funzionare bene con una persistente pagina di sfondo: è solo una pratica migliore usare una pagina evento (quando possibile).

0

Mi sono imbattuto in un problema simile; il mio problema era che non ho ricaricato l'estensione dopo aver cambiato il manifest.

Direi che il problema dell'OP era lo stesso.

Problemi correlati