10

Ich habe eine Webanwendung, die localStorage verwendet. Jetzt möchten wir diese Web-App über iframe auf anderen (Drittanbieter-) Websites einbetten. Wir möchten einen Iframe einbetten, der youtube ähnlich ist, damit andere Webseiten unsere Web-App in einen iFrame einbetten können. Funktional ist es genauso, als wäre es nicht eingebettet. Aber es funktioniert nicht. Chrome gibt die Fehlermeldung:Iframe in Chrome Fehler: Fehler beim Lesen von "localStorage" von "Window": Zugriff für dieses Dokument verweigert

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

ich nur die folgende Prüfung (in der iframe):

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

ich meine Sicherheitseinstellungen in Chrome überprüft wie in another Stackoverflow Thread beschrieben, aber es funktioniert nicht. Gibt es eine Änderung, um die Einbettung zu ermöglichen, ohne die (Standard) Sicherheitseinstellungen der meisten modernen Browser anpassen zu müssen?

Um weitere Informationen zu geben, verwenden wir Ember-CLI für unsere Web-App und eingeschaltet CSP (more info about the Ember-CLI CSP). Könnte CSP dazu führen, dass unsere Webanwendung Sicherheitsfehler verursacht?

+0

Ihr Titel erwähnt ein 'iframe'? ist etwas im iframe, das versucht, auf den lokalen Speicher zuzugreifen? das klingt, als könnte es eine Sicherheitswarnung auslösen? – Grapho

+0

@Grapho: Ich habe meine erste Frage umformuliert. Wir möchten nur anderen Webseiten die Möglichkeit geben, unsere Web-App über 'iframe' einzubetten. Der 'window.localStorage'-Aufruf befindet sich also in unserem Web-App-Code und damit im' iframe'. Wir wollen keine Cross-Domain-Sache machen. Stellen Sie einfach unsere Web-App über iframe zur Verfügung. Hoffe das klärt das Problem. – tschoartschi

+0

Wenn die Webanwendung lokalen Speicher verwendet, führt die Ausführung in einem iframe _will_ zu einem domänenübergreifenden Problem, da Window global ist. Es wird versucht, auf window.localstorage des lokalen Clients zuzugreifen .. denken Sie daran, dass locastorage ein Clientbrowser ist Ding .. nicht eine gehostete/Server-Sache .. Ihre App hat kein Wissen, wenn es von überall serviert wird – Grapho

Antwort

1

Wie bereits in den Kommentaren erwähnt, ist localstorage nur ein einziger Ursprung - der Ursprung der Seite. Der Versuch, über einen Iframe, der von einem anderen Ursprung geladen wurde, auf den lokalen Speicher der Seite zuzugreifen, führt zu einem Fehler.

Das Beste, was Sie tun können, ist es mit XDM über die PostMessage API zu hacken. This library vorgibt, das schwere Heben für Sie zu tun, aber ich habe es nicht versucht. Allerdings würde ich sicherstellen, dass Sie sich der IE's terrible support for XDM bewusst, bevor Sie diese Route gehen.

+1

Wie ich zuvor in einem Kommentar darauf hingewiesen habe, funktioniert alles wie erwartet, nachdem ich den iframe in eine Datei eingebettet habe, die von einem Webserver statt vom Dateisystem geliefert wird. Also alles funktioniert gut. Vielleicht habe ich meine Frage nur falsch formuliert. Aber danke für alle Kommentare und Erklärungen. Wenn jemand an mehr Details interessiert ist, fragen Sie einfach :) – tschoartschi

+0

Ich stehe vor einem ähnlichen Problem. Kannst du mich wissen lassen, wie du es gelöst hast? –

+0

das gleiche Problem hier, über Cookies denken ..:/ –

0

imho es hat nichts mit CSP-Einstellungen auf Ihrer Ember CLI App zu tun, sondern mit Browsereinstellungen zu tun. Einige Browser (Chrome) blockieren localStorage-Inhalte, die in einen Iframe geladen werden. Auch wir stehen vor einer ähnlichen Situation für unsere Ember App, wenn wir eine Ember App und ein Plugin haben, das auf Webseiten von Drittanbietern lädt, wird das in den Iframe geladene User Token in Chrom blockiert, wir experimentieren mit einigen Lösungen, die wir behalten Dieser Thread geschrieben, wie es geht.

11

Unter Chrome Einstellungen> Datenschutz> Inhaltseinstellungen haben Sie die Set-Cookie-Einstellung auf „Block Webseiten, die auf Daten für alle“

Diese Checkbox ist das, was die Ausnahme verursacht.

+6

Wenn es nicht Standard ist, ist es meist unbrauchbar, weil Benutzer Einstellungen nicht ändern, um einige Website zu verwenden. –

+1

Es geht nicht um die Option "Websites blockieren, sondern um Daten zu blockieren". Stattdessen wird die Einstellung "Cookies und Site-Daten von Drittanbietern blockieren" deaktiviert, wodurch die meisten Websites nicht unbrauchbar werden, die meisten Anzeigen jedoch nicht geschaltet werden – Picard

+0

Es erscheint ziemlich unangemessen zu erwarten, dass Besucher ihre Einstellungen dafür anpassen. Und ich bin mir sicher, dass es eine bessere Lösung geben muss. Ich stoße auf dieses Problem und versuche, die Youtube-API auf einer Website zu verwenden. Youtube funktioniert auf anderen Websites ohne Änderung der Einstellungen. Es muss eine bessere Lösung geben, sonst würde Youtube nicht auf anderen Seiten funktionieren. – mcv

1

Um diese Warnung loszuwerden - unter Einstellungen von Chrome -> Datenschutz -> Inhaltseinstellungen, müssen Sie den „Block Cookies von Drittanbietern und Standortdaten“ Option

2

Ein sicherer Weg, löschen, dies zu tun in Chrome würde nur die Website zu ermöglichen, sein (e), die 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" 
6

According to this

This exception is thrown when the "Block third-party cookies and site data" checkbox is set in Content Settings.
To find the setting, open Chrome settings, type "third" in the search box, click the Content Settings button, and view the fourth item under Cookies.

enter image description here

1

localStorage ist pro Domäne pro Protokoll. Wenn Sie versuchen, auf localStorage von einer eigenständigen Datei zuzugreifen, d. H. Mit file:/// Protokoll, gibt es keine Domäne per se. Daher würden Browser derzeit beschweren, dass Ihr Dokument keinen Zugriff auf localStorage hat. Wenn Sie Ihre Datei auf einen Webserver stellen (z. B. in Tomcat bereitstellen) und von localhost darauf zugreifen, können Sie auf localStorage zugreifen.

Verwandte Themen