Das Problem:Local Storage Cross Domain - Safari deaktiviert es standardmäßig
I Github-Projekt von Ofir Dagan verwendet haben: Speichern von Cross-Domain lokalen Speicher.
Es implementiert html5 lokalen Speicher: https://github.com/ofirdagan/cross-domain-local-storage
Das Problem:
Safari erlaubt keine Cookies von Drittanbietern standardmäßig (anderer Browser erlaubt es).
Safari Datenschutzeinstellungen sind:
Der Standardwert ist: "Erlauben von Websites, die ich besuchen".
Ich las über diese Einstellungen:
Immer sperren - Block alle Cookies von Erstanbietern und blockieren alle Cookies von Drittanbietern.
Nur aktuelle Website zulassen - Alle Cookies von Erstanbietern zulassen und alle Cookies von Drittanbietern blockieren.
von Websites zulassen I Besuchen - Lassen Sie alle Cookies von Erstanbietern und blockieren alle Cookies von Drittanbietern, es sei denn, dass Dritte eine erste Partei auf einmal war (basierend auf aktuellen Cookies und Browserverlauf).
Immer zulassen - Alle Cookies von Erstanbietern zulassen und alle Cookies von Drittanbietern zulassen.
Lösung Ich habe versucht:
Local Storage mit einem iframe (Pixel) - Ich denke, es ist nicht mehr auf Safari funktioniert - Is there any workaround to set third party cookie in Iframe for safari?
Ich denke, dass Es gibt eine Möglichkeit, lokalen Speicherplatz zwischen Websites von Erstanbietern und Drittanbietern in Safari freizugeben. (Facebook.com und Booking.com teilen Daten zwischen verschiedenen Domains).
Ich habe es erreicht, indem ich die API löschte und es selbst schrieb, aber ich möchte nicht die API entfernen und es selbst implementieren (hoffe, dass es eine kleine Korrektur gibt, um Safari zu unterstützen):
Iframe.html
:
window.addEventListener('cors_event', function(event) {
if(event.event_id === 'my_cors_message'){
if (event.data.options.funcName == "SetItem") {
localStorage.setItem(event.data.options.key, event.data.options.value);
}
else if (event.data.options.funcName == "GetItem") {
return localStorage.getItem(event.data.options.key);
}
}
});
MainPage:
<iframe id="target" src="iframe.html" frameborder="1"></iframe>
<script>
var target = document .getElementById('target');
target.onload = function(){
target.contentWindow.postMessage('set', '*')
}
</script>
Weiß jemand, wie ich das erreichen kann, indem ich eine API-Logik ändere, um Safari zu unterstützen?
Jede Hilfe wird geschätzt!
keine Cookies und lokale Speicherung verwirren. Das sind verschiedene Dinge. Cookies sind überhaupt nicht mit dem lokalen Speicher verknüpft. Wenn Sie also lokalen Speicher verwenden, kann die Richtlinie zum Umgang mit Cookies keine Probleme mit dem lokalen Speicher verursachen. – hindmost
Ich weiß, dass Cookies und lokaler Speicher unterschiedlich sind. Wenn ich jedoch zu "Immer zulassen" wechsle, wird der lokale Speicher von der Cross-Domain gelesen. Ich denke, dass lokaler Speicher mit "und Website-Daten" verwandt ist. Ich kann Ihnen ein Beispiel dafür senden .. (Speichern von Daten im lokalen Speicher der Website X und dann gehen Sie zur Website Y, die versucht, die Daten zu lesen). –
Bei welcher Safari-Version wurde dieses Verhalten geändert? – mash