Kann die GWT-Anwendung nicht als Chrome-App ausführen, wahrscheinlich aufgrund von CSP

8

Erhalten Sie CSP-Fehler: "Abgelehnt, um Inline-Skript auszuführen, da es gegen die folgende Richtlinie zur Inhaltssicherheitsrichtlinie verstößt:" script-src 'self' "

Das Problem ist wahrscheinlich auf HTML-Dateien zurückzuführen, die von GWT erzeugt wurden, die inline JS enthalten.

UPD : Die Umstellung auf die Manifest-Version 1 hat geholfen, aber dies ist ein temporäres Workaround, da Chrome 21 beschwert, dass es nicht mehr unterstützt wird.

UPD2: <add-linker name="xsiframe" /> hilft auch nicht

    
Alexey Timanovsky 25.08.2012, 15:16
quelle

4 Antworten

9

GWT 2.5.1 hat dieses Problem endlich behoben. Die Versionshinweise, die dies dokumentieren, sind hier:

Ссылка

und sie sagen das:

"Apps, die mit DirectInstallLinker erstellt wurden, sollten auf einer Seite funktionieren, auf der Inline-Skripts verboten sind (z. B. eine Chrome-Erweiterung)"

Dies bedeutet, dass es jetzt möglich ist, DirectInstallLinker zu verwenden, um Ihre Chrome-App so zu verknüpfen, dass die neuen Sicherheitsanforderungen von Manifest Version 2 für Inline-Skripts erfüllt werden. Das heißt, wenn Sie DirectInstallLinker verwenden, um Ihre App mit GWT 2.5.1 zu verknüpfen, das als Ihre GWT-Version ausgewählt wurde, wird GWT keine Skriptelemente in sein generiertes Javascript einfügen, und somit wird die neue Manifestversion 2-Anforderung, die es keine Inline-Skripts gibt, nicht verletzt werden.

Ich habe festgestellt, dass der SingleScriptLinker auch für meine eigene App zu funktionieren scheint; Issue 7685 warnt jedoch vor der Verwendung des SingleScriptLinker, weil "Dies eine $ doc.write-Zeile generiert, die in gepackten Apps verboten ist." Ich verwende DirectInstallLinker selbst.

Hier ist das Javadoc für DirectInstallLinker:

Ссылка

Um diesen Linker zu verwenden, können Sie Folgendes in Ihre * .gwt.xml-Datei einfügen:

%Vor%

(dil kann durch alles, was Sie auswählen, ersetzt werden, solange es keine Bindestriche oder andere unzulässige Zeichen gibt).

Sie müssen GWT 2.5.1 als Ihre Version von GWT auswählen. Wenn Sie eine ältere Version von GWT in einer veralteten Version von Eclipse wie Ganymed (so wie ich) verwenden, müssen Sie mindestens auf Helios upgraden und dann Ihr Projekt in Ihre neue Eclipse-Umgebung importieren. Die Archiv-URLs für das Google Plugin für Eclipse, die für die neuesten drei Eclipse-Versionen verwendet werden können, finden Sie hier:

Ссылка

Mit den oben genannten Einstellungen sollten Sie

festlegen können %Vor%

in Ihrer Datei manifest.json und keine Fehler aufgrund von GWT-generiertem Inline-Javascript. Dadurch sollte Ihre Chrome Web-App für den Chrome Web Store akzeptabel sein (für neue Apps oder Aktualisierungen von Apps müssen jetzt Manifest Version 2 sein), solange keine anderen Probleme auftreten.

    
Carl 14.05.2013, 22:05
quelle
5

BEARBEITEN: neuer GWT-Fehler gemeldet: Ссылка , siehe auch Ссылка , das mit diesem Fehler zusammenhängt

Mit anderen Worten, es sieht so aus, dass Sie, wenn sie behoben sind, einfach DirectInstallLinker ( <add-linker name='direct_install'/> ) verwenden müssen.

In der Zwischenzeit, IIUC, müssten Sie DirectInstallLinker und:

erweitern
  • override getJsInstallLocation , um eine Kopie zurückzuliefern a installLocaltionIframe.js ohne $wnd part
  • überschreiben Sie getModulePrefix , um var $wnd = $wnd || window.parent; dem von super.getModulePrefix generierten% voranzukommen

Ich kenne CSP nicht genug, um eine vollständige Antwort zu geben, aber der xsiframe-Linker ist "anpassbar": Erzeuge eine Klasse, die com.google.gwt.core.linker.CrossSiteIframeLinker erweitert und überschreibt die entsprechenden Methoden, dann mit <define-linker> und <add-linker> in deinem *.gwt.xml .

Zum Beispiel ist getJsInstallLocation standardmäßig auf com/google/gwt/core/ext/linker/impl/installLocationIframe.js , aber es gibt eine com/google/gwt/core/ext/linker/impl/installLocationMainWindows.js alternative Implementierung.

Ähnlich (und wahrscheinlich noch wichtiger) ist getJsInstallScript standardmäßig auf com/google/gwt/core/ext/linker/impl/installScriptEarlyDownload.js , aber es gibt auch eine com/google/gwt/core/ext/linker/impl/installScriptDirect.js alternative Implementierung.

Siehe Ссылка , Seitengruppen und Ссылка

    
Thomas Broyer 27.08.2012 22:09
quelle
2

Danke an Thomas Broyer. Ich habe diesen GWT Linker erstellt. Jetzt läuft meine GWT-Anwendung perfekt als Chrome-Anwendung (Getestet auf Chrome 32 und GWT 2.5.1).

  

Öffentliche Klasse CSPCompatibleLinker erweitert DirectInstallLinker {

%Vor%      

}

Vergessen Sie nicht, den Linker in Ihre * .gwt.xml Datei zu deklarieren:

%Vor%     
Mohamed Abdennebi 22.01.2014 14:22
quelle
0

Manifest Version 2 erlaubt keine Inline-Skripte. Sie müssen sicherstellen, dass alle Skripte verknüpft sind und kein JavaScript in HTML-Elementen.

    
Mike Grace 25.08.2012 16:51
quelle