it-swarm.com.de

Iframe in Chrome-Fehler: 'localStorage' konnte nicht von 'Window' gelesen werden: Zugriff für dieses Dokument abgelehnt

Ich habe eine Web-App, die localStorage verwendet. Nun möchten wir diese Web-App über iframe in andere (Drittanbieter) Websites einbetten. Wir möchten einen iframe-ähnlichen Embedded-Server wie youtube anbieten, damit andere Websites unsere Web-App in einen iframe einbetten können. Funktionell ist es so, als ob es nicht eingebettet wäre. Aber es funktioniert nicht. Chrome druckt die Fehlermeldung: 

Uncaught SecurityError: Failed to read the 'localStorage' property from 'Window': Access is denied for this document.

Ich mache nur die folgende Prüfung (im iframe): 

if (typeof window.localStorage !== 'undefined') {
    // SETUP SESSION, AUHT, LOCALE, SETTINGS ETC
} else {
    // PROVIDE FEEDBACK TO THE USER
}

Ich habe meine Sicherheitseinstellungen in Chrome wie in einem anderen Stackoverflow-Thread beschrieben überprüft. Dies funktioniert jedoch nicht. Gibt es eine Änderung, um das Einbetten zu ermöglichen, ohne dass (Standard-) Sicherheitseinstellungen der meisten modernen Browser angepasst werden müssen? 

Um weitere Informationen zu erhalten, verwenden wir Ember-CLI für unsere Web-App und aktivieren CSP ( weitere Informationen zum Ember-CLI-CSP ). Könnte CSP dazu führen, dass unsere Web-App Sicherheitsfehler auslöst?

17
tschoartschi

Unter Einstellungen> Datenschutz> Inhaltseinstellungen von Chrome haben Sie die Cookie-Einstellung auf "Sperren, dass Websites keine Daten festlegen" festgelegt.

Dieses Kontrollkästchen verursacht die Ausnahme. 

19
Paul Irish

Demzufolge

Diese Ausnahme wird ausgelöst, wenn das Kontrollkästchen "Cookies und Website-Daten von Drittanbietern blockieren" in den Inhaltseinstellungen aktiviert ist.
Um die Einstellung zu finden, öffnen Sie die Chrome-Einstellungen, geben Sie "dritte" in das Suchfeld ein, klicken Sie auf die Schaltfläche Inhaltseinstellungen und zeigen Sie das vierte Element unter Cookies an.

 enter image description here

11
AvrilAlejandro

Ein sicherer Weg, dies in Chrome zu tun, wäre, nur die Sites zuzulassen, denen Sie vertrauen:

Chrome
  -> "Settings"
    -> "Show advanced settings..."
      -> "Privacy"
        -> "Content settings..."
          -> "Manage exceptions..."
            -> (add a pattern such as [*.]Microsoft.com)
            -> be sure to hit enter
            -> "Done"
          -> "Done"
3
GaTechThomas

Auf der folgenden URL: chrome://settings/content/cookies "Cookies von Drittanbietern blockieren" deaktivieren.

2
e18r

localStorage ist pro Domäne und Protokoll. Wenn Sie versuchen, auf localStorage von einer Standalone-Datei aus zuzugreifen, d. H. Mit dem file:///-Protokoll, gibt es keine Domäne an sich. Daher würden Browser derzeit beschweren, dass Ihr Dokument keinen Zugriff auf localStorage hat. Wenn Sie Ihre Datei auf einem Webserver ablegen (z. B. in Tomcat implementieren) und von localhost aus darauf zugreifen, können Sie auf localStorage zugreifen.

2
Somu

Um diese Warnung zu beseitigen, müssen Sie unter Chrome Einstellungen -> Datenschutz -> Inhaltseinstellungen die Option "Cookies und Website-Daten von Drittanbietern blockieren" deaktivieren

1
Picard

Wie in den Kommentaren darauf hingewiesen wurde, handelt es sich bei localstorage nur um den Origin-Ursprung - den Ursprung der Seite. Der Versuch, von einem aus einem anderen Ursprung geladenen iframe auf den localstorage der Seite zuzugreifen, führt zu einem Fehler.

Am besten hacken Sie es mit XDM über die postMessage-API. Diese Bibliothek gibt vor, das schwere Heben für Sie zu tun, aber ich habe es nicht versucht. Ich würde jedoch sicherstellen, dass Sie die schreckliche Unterstützung von IE für XDM kennen, bevor Sie diesen Weg beschreiten.

1
Mike Post

imho hat es nichts mit CSP-Einstellungen in Ihrer Ember-Cli-App zu tun, sondern mit Browsereinstellungen. Einige Browser (Chrome) blockieren localStorage-Inhalte, die in einen iframe geladen werden. Wir haben auch eine ähnliche Situation für unseren Ember App, wenn wir eine Ember-App und ein Plugin haben, das auf Websites von Drittanbietern geladen wird, der in den iframe geladene Benutzertoken in Chrom blockiert wird, experimentieren wir mit einigen Lösungen, wird dieser Thread auf dem Laufenden gehalten.

0
Mad Scientist