2013-07-08 16 views
16

Po uruchomieniu rozszerzenia Chrome zauważyłem, że po uruchomieniu skryptu w tle w pliku manifestu uruchomiony zostanie skrypt w tle, tak jak podczas przeglądania Internetu lub na innej innej stronie. strona rozszerzenia skrypt w tle nie będzie działał.Rozszerzenie Google Chrome - skrypt w tle

Oto co mam na myśli:

W moim pliku manifestu:

"background": { 
    "scripts": ["jquery-latest.js","background.js"] 
    }, 

obecnie w pliku background.js:

$(document).ready(function(){ 
    alert("working"); 
}); 

używam prosta funkcja alert aby sprawdzić, czy to zadziała i okaże się, że alert("working"); wyświetla się tylko wtedy, gdy jestem na chrome://extension bezpośrednio ory. Jeśli przejdę na stronę google.com lub coś podobnego, bez cygara.

Moje pytanie dotyczy: dlaczego tak się dzieje? Jak mogę to zmienić, aby ostrzegał bez względu na wszystko.

+2

Nie mogłem odtworzyć opisanego zachowania. Widzę działający w tle skrypt działający dokładnie raz, gdy albo zainstaluję rozszerzenie, albo ponownie uruchomię przeglądarkę z zamkniętego stanu. Nie ma znaczenia, czy patrzę na stronę 'chrome: // extensions' (chociaż jest to konieczne do zainstalowania rozszerzenia, ale nie jest to tym, co podpowiada zachowanie). – apsillers

+1

@apsillers Jeśli odświeżysz stronę 'chrome: // extensions /' (Ctrl + R lub F5), wszystkie rozszerzenia zostaną przeładowane. Prawdopodobnie dlatego OP obserwuje zachowanie, które opisał. –

+3

@RobW Aha, tak, widzę, że * odświeżanie * strona odtwarza zachowanie. Wydaje się, że jest to niezwykle przydatny skrót do debugowania; dzięki! – apsillers

Odpowiedz

25

Wersja background script powinna być wyświetlana jako "działająca w tle przeglądarki Chrome".
Pożądany efekt (uruchamianie skryptu dla każdej strony) jest w rzeczywistości zadaniem dla content scripts. Aby uzyskać więcej informacji, przeczytaj , aby uzyskać więcej informacji.

+0

Czyli zamiast skryptu w tle, zamienisz go na skrypt treści? –

+0

@DavidBiga Dokładnie. –

+0

więc nadal mam problemy, staram się używać: '" content_scripts ": [js: [" jquery-latest.js "," background.js "] } ]," - czy ja też trzeba dostarczyć mecze i css? –

2

To dlatego, że używasz strony w tle .. użyć strony zdarzeń zamiast lekko modyfikując manifest.json .. warto dodać to:

"background": { 
    "scripts": ["jquery-latest.js","background.js"], 
    "persistent": false 
    }, 

więcej szczegółów na stronach Kontrola zdarzeń to: https://developer.chrome.com/extensions/event_pages

1

Efekt jest produkowany, ponieważ po załadowaniu chrome://extensions zmusza rozszerzenia do ponownego załadowania, to samo zachowanie można odtworzyć za pomocą CTRL + R. Za każdym razem strona w tle otrzymała nowe przeładowanie, co nie ma miejsca w przypadku innych stron.

Powiązane problemy