origin headers habilitar domain cross control chrome allow javascript html5 safari cross-domain local-storage

javascript - headers - Almacenamiento local Cross Domain: Safari lo desactiva de manera predeterminada



xmlhttprequest cors javascript (2)

Puede probar Store.JS . De acuerdo con los documentos:

store.js expone una API simple para el almacenamiento local de navegador cruzado

El problema

He utilizado el proyecto github de Ofir Dagan: Almacenamiento de almacenamiento local de dominios cruzados.

Implementa almacenamiento local html5: https://github.com/ofirdagan/cross-domain-local-storage

El problema :

Safari no permite cookies de terceros por defecto (otros navegadores lo permiten).

Las preferencias de privacidad de Safari son:

El valor predeterminado es: "Permitir desde sitios web que visito".

Leí acerca de estas configuraciones:

  1. Bloquear siempre : bloquea todas las cookies de origen y bloquea todas las cookies de terceros.

  2. Permitir solo desde el sitio web actual : permita todas las cookies de origen y bloquee todas las cookies de terceros.

  3. Permitir desde sitios web que visito - Permitir todas las cookies de origen y bloquear todas las cookies de terceros a menos que ese tercero fuera el primero a la vez (según las cookies actuales y el historial de navegación).

  4. Permitir siempre : permite todas las cookies de origen y permite todas las cookies de terceros.

Solución que he intentado :

Almacenamiento local con un iframe (píxel): creo que ya no funciona en Safari. ¿Existe alguna solución alternativa para establecer cookies de terceros en Iframe for safari?

Creo que hay una forma de compartir el almacenamiento local entre sitios de terceros y de terceros en Safari. (Facebook.com y Booking.com comparten datos entre diferentes dominios).

Logré lograrlo eliminando la API y escribiéndola solo, pero no quiero eliminar la API y ponerla en práctica por mi cuenta (espero que haya una pequeña solución para admitir Safari):

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>

Entonces, ¿alguien sabe cómo puedo lograrlo cambiando alguna lógica API para admitir Safari?

Cualquier ayuda apreciada!


Notas sobre Safari 7+ (OSX, iOS)

Todo el acceso de almacenamiento local entre dominios está deshabilitado de forma predeterminada con Safari 7+. Esto se debe a que la configuración de privacidad "Bloquear cookies y otros datos del sitio web" está configurada en "De terceros y anunciantes". Cualquier código de cliente de almacenamiento cruzado no se bloqueará, sin embargo, solo tendrá acceso a una instancia de almacenamiento local aislada y aislada. Como tal, ninguno de los datos previamente establecidos por otros orígenes será accesible. Si se trata de una opción, uno podría recurrir al uso de cookies de raíz para esos agentes de usuario o solicitar los datos de una tienda del lado del servidor.

más detalles ver esta lib