29

To jest względne rozszerzenie do Chrome. Próbuję prosty, który używa Google Chart APIPolityka bezpieczeństwa treści: nie można załadować interfejsu Google API w rozszerzeniu Chrome

Mam ten kod w moim dokumencie HTML "popup.html", który jest ładowany na kliknięcie na ikonę.

<!doctype html> 
<html> 
<head> 
    <script type="text/javascript" src="js/libs/jquery-1.8.0.min.js"></script> 
    <script type="text/javascript" src="js/popup.js"></script> 
    <script type="text/javascript" src="http://www.google.com/jsapi?key=xxxxxxxxxxx"></script> 

    [...] 
</body> 
</html> 

pojawia się następujący komunikat:

Odmówił załadować skrypt „http://www.google.com/jsapi?key=xxxxxxxxxxx”, ponieważ narusza następującą dyrektywę Content Security Policy : "script-src" self "chrome-extension-resource:".

zrozumiałem, że jest coś w stosunku do uprawnień, próbowałem zmodyfikować mój plik manifestu, ale bez powodzenia:

{ 
    [...] 
    "manifest_version": 2, 
    "permissions": ["http://*.google.com/"], 
    "content_security_policy": "script-src 'self' http://www.google.com; object-src 'self'", 
} 

jakiś pomysł?

+0

Użyj 'https:' zasobu. Zasoby Http nigdy nie mogą znaleźć się na białej liście. –

Odpowiedz

22

Po prostu użyj zamiast tego protokołu https. Błąd, który otrzymujesz, dotyczy Content Security Policy.

Zobacz sekcję strony na stronie Relaxing the default policy. Podano, że można tylko dodać do białej listy HTTPS, chrome-extension i chrome-extension-resource.

+0

Dzięki @Amaan to działa ... Prawie! Czy powinienem mieć inną polisę? Nawet teraz interfejs API Google jest załadowany, nie mogę go uruchomić. ' google.load (" wizualizacja "," 1 ", {pakiety: [" corechart "," tabela "]}); ' Odmówiono wykonania skryptu wbudowanego, ponieważ narusza następującą dyrektywę Content Security Policy:" script-src "self" https://www.google.com ". – Laurent

+1

Cóż, nie ma skryptów wbudowanych! Zamiast tego używaj 'document.getElementById ('elementID'). AddEventListener' dla zdarzeń. Dodaj plik 'popup.js' dla swoich bloków kodu JS. Zobacz http://developer.chrome.com/trunk/contentSecurityPolicy.html#H3-1 –

28

Walczyłem z tym problemem przez ostatnie 12 godzin i w końcu udało mi się. Dlaczego to trwało tak długo? Bo wiele razy zostałem zrzucony ze szlaku. Po pierwsze, fałszywe odprowadzenia:

  1. "Zrób to HTTPS" - Nieważne. Moje rozszerzenie Chrome teraz wykonuje regularne połączenia HTTP z inną domeną i działa dobrze. (AKTUALIZACJA: Troszkę więcej wyjaśnień Mit "make it https" jest zakorzeniony w podobnym problemie, jaki ludzie mają zazwyczaj, gdy chodzi o ładowanie SCRIPT. Jeśli potrzebujesz dostarczyć zewnętrzny plik .js, to tak, musisz zmodyfikuj swój content_security_policy i dodaj poprawną nazwę hosta, która wydaje się akceptować tylko https. Pamiętaj, że to jest inne niż trafienie na zewnętrzną nazwę hosta dla czegoś takiego jak usługi REST. Jak już wcześniej wspomniałem, nie wymaga to modyfikacji content_security_policy, ani https.)

  2. "Użyj JSONP w połączeniach AJAX JQuery" - To może być sposób na adresowanie AJAX w wielu domenach na zwykłych stronach internetowych, ale nie jest to konieczne w rozszerzeniu chrome z powodu wbudowanego zabezpieczenia zawartości Polityka. Co więcej, implementacja JSONP brzmi jak PITA, ponieważ wymaga zmian po stronie serwera, aby obsłużyć parametr wywołania zwrotnego (lub coś, nadal nie jestem pewien). W każdym razie nie jest to konieczne.

  3. "Bałagan z łańcuchem Polityki bezpieczeństwa treści (CSP) w twoim rozszerzeniu" - W manifeście numer 2 domyślny ciąg działa dobrze: "script-src" self '; object-src' self '". Nie musisz nawet tego wyraźnie określać. Potrzebna jest domena, z której próbujesz trafić z rozszerzenia, jako wartość "uprawnienia".

Rozwiązanie:

Usuń wszystko inline JavaScript z rozszerzeniem. Pobierz go do oddzielnego pliku .js. Podejrzewam, że dla większości plików html z przyzwoitą ilością javascript, ten proces będzie ssał. Na szczęście dla mnie wszystko, co miałem, było obciążeniem ciała, które udało mi się przenieść do oddzielnego pliku js jako zdarzenia onload window.addlistener.

strona naprawdę trzeba czytać, aby ominąć ten problem jest tutaj: https://developer.chrome.com/apps/contentSecurityPolicy

+0

Pokaż przykłady kodu, jak naprawić ten przypadek, szczególnie w "content_security_policy" wewnątrz pliku manifestu. – Mohammad

Powiązane problemy