guardar contraseñas ios cookies ios7 safari iphone-standalone-web-app

contraseñas - iOS7 Safari: guardar en la pantalla de inicio y conservar el token



guardar contraseñas safari iphone (1)

Desde iOS 5 Apple ha estado haciendo que los marcadores de la pantalla de inicio estén cada vez más aislados en términos de compartir datos entre el navegador Safari y lo que ahora se considera una aplicación de espacio aislado.

  • iOS <= 5 : todo fue genial, almacenamiento local, cookies, las obras se compartieron entre la pantalla de inicio y la página web. La transición entre el sitio y la pantalla de inicio fue perfecta y los desarrolladores web estaban contentos.
  • iOS 6 : Apple comenzó a tratar las aplicaciones de la pantalla de inicio (incluidas las guardadas en la web) como aplicaciones de espacio aislado. Esencialmente, la aplicación de pantalla de inicio que mostraba su sitio guardado se convirtió en un control WebView y no estaba incorporando Safari. Esto impidió que se transfiriera el almacenamiento local, pero aún así podría compartir cookies.
  • iOS <= 6.x : las cookies se volvieron poco confiables después de una determinada publicación de puntos, aún se compartieron, pero no se transfirieron en el primer guardado. Si volvió al sitio y realizó alguna acción, la cookie mágicamente estará disponible para la aplicación de la pantalla de inicio.
  • iOS 7 : todas las formas de compartir datos (almacenamiento local, cookies, etc.) entre la pantalla de inicio y el sitio desde el que se guardó se han perdido (casi), aplastando los sueños del desarrollador en todo el mundo.

En el momento de escribir (iOS 7.1 en beta), solo tiene una opción.

  1. Cuando su página se carga, agregue su token / data a un parámetro de cadena de consulta en la URL usando JavaScript ( window.location.search ). Cuando el usuario guarda el sitio en su pantalla de inicio, la URL se usa como la clave. Su JavaScript puede extraer fácilmente el parámetro de cadena de consulta que introdujo anteriormente si detecta que se encuentra en el modo de pantalla de inicio ( window.standalone ). Esto debería funcionar para siempre, excepto que el valor en la URL también estará allí para siempre.

  2. Otro truco que es ''renderizar'' cualquier valor que quiera llevar a la pantalla de inicio en el DOM. Desde las primeras versiones de iOS, el HTML que se procesa en el momento en que se guarda en la pantalla de inicio no cambiará. Al iniciar una aplicación web de pantalla de inicio, no solicita el contenido de la URL . Simplemente carga el HTML que se guardó previamente sin solicitud web inicial (se solicitarán todos los enlaces a CSS y JS en el HTML, pero no a la página en sí). Con el conocimiento de que el HTML se guardará para siempre, también lo hará cualquier cosa que represente en él. La única forma de actualizar su página es hacer una windows.reload o una redirección equivalente si no está extrayendo su contenido a través de AJAX. En pocas palabras, inyecte su valor en un campo de entrada oculto, por ejemplo, y se transferirá a través de.

La opción n. ° 1 probablemente dure para siempre, no es probable que la pantalla de inicio altere la URL de alguna manera. Solo asegúrate de tener algunos JS en su lugar para activar un interruptor y volver a cargar la página si alguna vez quieres deshacerte de ella.

La opción n. ° 2 es algo arriesgada porque, un día, Apple, que lo sabía todo, podría decidir que se debería realizar una solicitud de página inicial en lugar de usar el mismo HTML en el momento en que se guardó. Esto borrará los datos que tiene y el estado actual de cualquier elemento en el DOM.

ACTUALIZACIÓN : La técnica de inyección de DOM ya no es válida (iOS 7+), solo el DOM descargado directamente del servidor se guarda en la pantalla de inicio. Cualquier cambio dinámico realizado durante el tiempo de ejecución se pierde. Sopló la opción n. ° 2 porque la pregunta es para iOS 7 y funciona más, lo que le deja con solo la opción n. ° 1, agregando algo a la URL que siempre se guardará en la pantalla de inicio.

Para iOS 6. [algo] en adelante Cookies, datos SQLite y datos locales de almacenamiento para aplicaciones web de pantalla completa se almacenan por separado de los datos de Safari. Tengo un token que necesito persistir en la aplicación de la pantalla de inicio cuando guardo en la pantalla de inicio.

Hay un probador de cookies aquí . Y una discusión aquí .

¿Alguien ha encontrado una solución elegante a este problema? Soluciones muy feas también serán consideradas :)