2015-11-24 10 views
7

Pracuję nad rozszerzeniem przeglądarki Chrome za pomocą React i WebPack.Pakiety skryptów zawartości Webpack i programowo wstrzykiwanych

W tym projekcie różne moduły będą programowo wstrzykiwać skrypty treści za pomocą chrome.tabs.executeScript(null, {file: 'content-script-file.js'}).

Jest to problematyczne, ponieważ używam pakietu Webpack do łączenia wszystkich elementów. Zasadniczo skrypt działający w tle ładuje kilka modułów, które są skonfigurowane do programowego uruchamiania skryptów zawartości w określonych okolicznościach.

Nie mogę jednak dowiedzieć się, jak te "skrypty" zostaną "znalezione" w pakiecie aplikacji. Nie są one nigdy jawnie importowane, odwołują się tylko do wywołań executeScript.

W tym samym czasie skrypty treści korzystają z opcji Reaguj, dlatego muszą przejść przez stronę WWW w wersji babel-loader.

Wszelkie pomysły?

+0

Więc w zasadzie musisz utworzyć funkcję otoki, która wstrzykuje skrypt babel (prawdopodobnie bardzo duży), a następnie skrypt treści (i prawdopodobnie kod, który wyzwala babel) ... Nie boisz się, że obciążenie mogłoby być zbyt duże? – wOxxOm

+0

@wOxxOm: Chciałbym uniknąć tego rodzaju rozrostu, żeby być szczerym, ale jestem nowy w Webpack, więc nie jestem pewien, co może zrobić, aby temu zapobiec. – damd

+0

Skuteczne podejście polegałoby na wstrzykiwaniu skompilowanych skryptów. Sądzę, że będziesz musiał ręcznie zdefiniować listę skryptów do prekompilacji, ale nie jestem ekspertem od webpacka. – wOxxOm

Odpowiedz

1

Twoje skrypty treści są skutecznie "punkty wejścia" w WebPACK-warunkach.

Każdy skrypt treści najwyższego poziomu powinien być zdefiniowany jako wpis w pakiecie sieci Web. Skorzystaj z pakietu webowego, aby zbudować te skrypty treści. Każdy wpis pobiera wszystkie swoje zależności (np. React) w jeden duży obiekt typu blob.

Następnie tworzysz drugą kompilację, która zbuduje rozszerzenie. To rozszerzenie będzie używać surowego ładowarka i import swoje WebPACK skompilowane skrypty zawartość, a następnie będzie musiał je wszystkie jako ciągi zmiennych lokalnych:

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

I teraz można wstrzykiwać skrypty do swoich zakładek, ile potrzeba:

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

To powinno działać, w chrome docs say wykonuj skrypt z wyjątkiem ciągu znaków lub ciągów znaków.

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

 
chrome.tabs.executeScript(null, ContentScript);

+0

Pytanie z definicji nie jest odpowiedzią, dlatego powinno to być komentarzem, a nie odpowiedzią – RononDex

Powiązane problemy