2015-11-24 7 views
7

Sto sviluppando un'estensione di Chrome utilizzando React e Webpack.Webpack e script di contenuto a iniezione programmata

In questo progetto, diversi moduli programmeranno in modo programmatico gli script di contenuto utilizzando chrome.tabs.executeScript(null, {file: 'content-script-file.js'}).

Questo diventa problematico poiché utilizzo Webpack per unire tutto. Fondamentalmente, lo script in background sta caricando un numero di moduli, che sono tutti configurati per iniettare script di contenuto a livello di programmazione in determinate circostanze.

Tuttavia, non riesco a capire in che modo questi script di contenuto verranno "trovati" nell'applicazione in bundle. Non vengono mai importati in modo esplicito, con riferimento alle chiamate executeScript.

Allo stesso tempo, gli script di contenuto utilizzano React, quindi devono passare attraverso lo babel-loader in Webpack.

Qualche idea?

+0

Quindi, in pratica, dovrai eseguire una funzione wrapper che inietta lo script babel (probabilmente uno molto grande) quindi lo script di contenuto effettivo (e probabilmente il codice che fa scattare babele) ... Non hai paura che il sovraccarico possa essere troppo grande? – wOxxOm

+0

@wOxxOm: Vorrei evitare questo tipo di esagerazione, ma sono nuovo di Webpack, quindi non sono sicuro di cosa possa fare per impedirlo. – damd

+0

L'approccio efficiente sarebbe quello di iniettare script precompilati. Immagino che dovrai definire manualmente un elenco di script da precompilare ma non sono esperto di webpack. – wOxxOm

risposta

1

Gli script contenuti sono effettivamente "punti di ingresso" in webpack-termini.

Ogni script di contenuto di livello superiore deve essere definito come una voce del pacchetto Web. Utilizzare il webpack per creare questi script di contenuto. Ogni voce inserirà tutte le sue dipendenze (come React) in un unico grande blob.

Quindi si effettua una seconda build del webpack che crea l'estensione. Questa estensione utilizzerà il loader crudo e import vostri script contenuti WebPack-compilati e poi li avrà come stringhe variabili locali:

import scriptA from 'content/build/a'; 
import scriptB from 'content/build/b'; 

E ora si può iniettare gli script nelle vostre schede in base alle esigenze:

chrome.tabs.executeScript(null, scriptA); 
-1

Questo dovrebbe funzionare, i documenti di Chrome dicono eseguire script di eccezione codice stringa o file stringa.

import ContentScript from './content-script-file'; 
 

 
chrome.tabs.executeScript(null, ContentScript);

+0

Una domanda non è una risposta per definizione, quindi questo dovrebbe essere un commento, non una risposta – RononDex