2012-12-03 15 views
8

Tworzę rozszerzenie chrome, które używa jQuery/Zepto w skrypcie treści. Teraz rozszerzenie ma działać na każdej stronie, co oznacza, że ​​kopia jQuery/Zepto jest ładowana na każdej zakładce, którą otwiera użytkownik.Rozszerzenie chrome: udostępnianie obiektu między skryptami treści a skryptem tła

Czy istnieje sposób udostępniania obiektu jQuery/Zepto między różnymi skryptami treści?

Wiem, że skrypty treści mogą komunikować się ze skryptem w tle. Miałem nadzieję, że będę mógł zezwolić skryptowi w tle na dostęp do obiektu jQuery i zwrócenie odniesienia do niego, do każdego ze skryptów treści. Ale zdałem sobie sprawę, że tylko komunikaty JSON można przekazywać między skryptami treści i tła.

Czy jest jakiś sposób osiągnięcia tego, czego chcę?

+0

Nie, nie można udostępniać bezpośrednich odwołań do funkcji między skryptami treści. (zduplikowane pytanie: [Jak przesłać dane między skryptami treści dwóch różnych kart?] (http://stackoverflow.com/questions/11597416/how-to-transfer-data-between-the-content-scripts-of- dwie różne karty)). –

+0

Opublikuj to jako odpowiedź, a ja to zaakceptuję. Przy okazji, pytanie - myślałem, że wczorajsze uwzględnienie jQuery na każdej stronie może nie stanowić problemu, ponieważ w przeciwieństwie do rzeczywistych zasobów strony internetowej nie trzeba jej pobierać. Biorąc pod uwagę, że średni rozmiar strony internetowej zbliża się do 1 MB (jak czytam w Internecie), wzrost konsumpcji pamięci nie powinien stanowić większego problemu, niż sądziłem. Czy to ma sens? –

Odpowiedz

9

skrypty zawartość w różnych zakładkach nie mają dostępu do siebie nawzajem albo obiektów JavaScript.

Chrome obsługuje komunikację między skryptami treści i/lub stroną w tle za pośrednictwem chrome.runtime.sendMessage + .onMessage. Ponieważ wszystkie wiadomości są serializowane w JSON, obiekt JavaScript nie może zostać "przechwycony" do innych kontekstów w ten sposób.

Tak: Nie, nie można udostępniać obiektów, takich jak jQuery, za pomocą (skryptów zawartości) innych kart.

1

Execution environment z Content Scripts zapewnić skrypty treści mogą komunikować się między sobą

Ex:

"content_scripts": [ 
    { 
     "matches": ["<all_urls>"], 
     "js": ["myscript.js","myscript1.js"] 
    } 
    ] 
} 

Individual DOM Environment gdzie skrypty treści ["myscript.js","myscript1.js"] wstrzykiwane, zapewnia myscript1.js mieć dostęp do wszystkich treści (funkcje, zmienne) z myscript.js, ale to przestaje się komunikować z dwoma Individual DOM Environment.

powiedziawszy, Co Ograniczenie \ wymóg widać w Content Scripts który wzywa do wymogu gdzie message passing potrzeby background pages dostępu do DOM of injected pages?

Należy opracować

Powiązane problemy