2011-04-25 11 views
10

Oto scenariusz:Jak określić różne wzory dopasowania wielu skryptów treści w pliku manifest.json tego samego rozszerzenia

Scenariusz 1: chcę wstrzyknąć zawartość do różnych skryptów opartych na różnych stronach Domena URL.

Ex: wstrzykiwać cs1.js skrypt zawartość do www.a.com ale wstrzyknąć cs2.js skrypt zawartość do www.b.com. Zarówno skrypty treści cs1.js, jak i cs2.js są częścią tego samego rozszerzenia chrome.So jak mogę określić różne wzory dopasowania (w sekcji "mecze" podczas definiowania "content_scripts" w pliku manifest.json), tak aby jeden skrypt jest wstrzykiwany na jednej stronie, a drugi jest wstrzykiwany na innej stronie.

Scenariusz 2: Jak mogę wspomnieć, jeżeli w subdomenie powiedzieć www.a.com pragnę wstrzyknąć skrypt treści do wszystkich stron w domenie wyjątkiemwww.b.a.com (wszystkie inne subdomeny należy wstrzyknięto skrypt zawartości). Jak określić wzór dopasowania dla tego przypadku.

Z góry dziękuję.

Odpowiedz

9

Określenie parametru content_scripts w pliku manifest.json jest nieco ograniczone. Chociaż możesz określić różne wzory dopasowań, możesz mieć tylko możliwość wykonania jednego możliwego skrętu plików.

Aby osiągnąć to, co chcesz, musisz skonfigurować background_page, który może zinterpretować adresy URL stron i wykonać skrypty treści według własnego uznania.

trzech różnych metod może być:

  1. pomocą manifestu content_scripts pasujące do wszystkich możliwych adresów URL i wykonać prostą zawartość skryptu do wysyłania żądania wiadomość do tła strony poprzez chrome.extension.sendRequest(). Strona w tle nasłuchuje wiadomości o numerze chrome.extension.onRequest.addListener(), odbiera wiadomość, interpretuje adres URL karty z numerem sender.tab.url (lub prawdopodobnie wysyła komunikat tabulatora o numerze window.location.hostname), a następnie decyduje, jakie skrypty treści mają być wprowadzane do karty za pośrednictwem chrome.tabs.executeScript().

    lub

  2. Wystarczy mieć swój background_page nasłuchiwać chrome.tabs.onCreated.addListener() i chrome.tabs.onUpdated.addListener() aby uzyskać adres URL kartę, a następnie zdecydować, jakie skrypty treści wstrzyknąć do karty poprzez chrome.tabs.executeScript(). Nie trzeba określać w tym manifeście content_scripts.

    lub

  3. Podobnie jak 1, ale mają swój oczywisty postać content_scripts skryptu, co zrobić w oparciu o aktualny adres URL (znowu mógłby zinterpretować window.location.hostname), a następnie użyć chrome.extension.sendRequest() z wiadomością dla twojej background_page stwierdzające, której treść skrypty do wykonania (co oznacza, że ​​twój background_page nie decyduje - oryginalny skrypt zawartości). Ten sam wynik.

+9

Właściwie to jestem niepoprawny. * Możesz * mieć różne parametry dopasowania i różne skrypty, które są wykonywane. Po prostu dodaj inny obiekt do tablicy 'content_scripts', z innym zestawem' match' i 'js', etc, jeśli to konieczne. –

+0

Witaj Chris, bardzo dziękuję za sugestie, były bardzo pomocne, szczególnie druga odpowiedź (dodanie innego obiektu do content_script). Doskonale. – Venkatesh

+0

Po prostu miałem inne pytanie ad-hoc na chrome ext .. W jaki sposób można uzyskać dostęp do DOM i manipulować nim (bezpieczną https), która została utworzona przez rozszerzenie (używając chrome.tabs.create) i jak uzyskać dostęp do DOM stron https w ramach elementu iframe (jeśli jest to możliwe). – Venkatesh

Powiązane problemy