2015-03-04 10 views
8

Ho popup.html dove popup.js viene richiamato quando il popup viene caricato facendo clic sull'azione del browser. Lì sto iniziando a iniettare script di contenuto con chrome.tabs.executeScript(). Devo aggiungere un elemento al corpo della pagina. Come posso inserire codice HTML da un file .html diverso all'interno dell'estensione, perché è molto più semplice mantenere il codice in questo modo. Stavo pensando di accedervi all'interno di popup.js (c'è qualche chiamata API per questo?) E quindi all'interno dell'attributo code per inserire il codice di script del contenuto con una stringa di codice HTML recuperato.Come leggere il file dall'estensione di Chrome?

Ho visto alcuni metodi utilizzando XMLHttpRequest dallo script di contenuto, ma è lì per evitarlo? Ho provato con chrome.fileSystem, ma è per app chrome e non per estensioni.

+0

Ho detto esattamente che non mi piacerebbe utilizzare la richiesta Ajax con XMLHttpRequest. Non c'è un modo per caricare un altro HTML da popup.js che non è uno script di contenuto? – Tommz

risposta

14

Come commento citato, si tratta solo di fare una richiesta GET a chrome.runtime.getURL("myfile.html"), dove "myfile.html" è il percorso relativo (dalla radice dell'estensione) al file che si desidera.

È possibile farlo con XHR raw o, se si utilizza jQuery, utilizzando $.ajax.

Per farlo da uno script di contenuto, è necessario dichiararlo in "web_accessible_resources".


Dato che non lo vuoi, sì, c'è un altro modo (non disponibile per gli script di contenuto).

È possibile ottenere una sola lettura HTML5 Filesystem accesso ai file del proprio interno con chrome.runtime.getPackageDirectoryEntry:

chrome.runtime.getPackageDirectoryEntry(function(root) { 
    root.getFile("myfile.html", {}, function(fileEntry) { 
    fileEntry.file(function(file) { 
     var reader = new FileReader(); 
     reader.onloadend = function(e) { 
     // contents are in this.result 
     }; 
     reader.readAsText(file); 
    }, errorHandler); 
    }, errorHandler); 
}); 

Come potete vedere, questo è di gran lunga più complicato di una richiesta XHR. Uno probabilmente lo userebbe solo se uno vuole list the files.

+0

Ciò che mi confonde è che - gli script di contenuto sono quelli che vengono inseriti nella pagina di visualizzazione, ma l'altro file javascript (come l'esecuzione di finestre popup di estensioni) non lo sono e dovrebbero avere un modo per accedere agli altri file all'interno dell'estensione, non è così? Anche questi script devono effettuare chiamate ajax? – Tommz

+0

Scusa, ho notato il tuo requisito in ritardo. Attualmente sto modificando la risposta. – Xan

+0

Sì, vero. Questo è davvero molto più complicato. Grazie per queste spiegazioni. – Tommz