2010-11-27 22 views
29

Estoy intentando crear una "aplicación web nativa" con HTML + JS en iOS. Como sabrá, puede agregar una aplicación de este tipo a la pantalla de inicio y se verá más o menos como una aplicación nativa normal.Detener la aplicación web nativa al volver a cargarse al abrir en iOS

Sin embargo, si salgo de dicha aplicación y la vuelvo a abrir, vuelve a cargar toda la página. Esto también ocurre al cambiar a una aplicación de este tipo desde otra sobre la barra de tareas múltiples.

¿Se espera este comportamiento o hay alguna manera de evitar que el dispositivo haga esto?

A modo de ejemplo se puede añadir el jQTouch-Demos de aquí a la pantalla de inicio y probarlo: http://jqtouch.com/preview/demos/main/

+0

Ver mi respuesta aquí : http://stackoverflow.com/a/40707231/473637 – Jeshurun

Respuesta

9

Se puede guardar el estado de su aplicación en el almacenamiento local. Al reiniciar, verifique si el estado se está ejecutando, luego restaure la aplicación donde estaba el último.

+0

Resolví el problema al crear una aplicación WebView que se compiló para iOS 4.2 y, por lo tanto, admite la multitarea. Esto funciona perfectamente para mi. – cguedel

+0

Creo que la sugerencia de ghenne es probablemente la mejor solución actualmente. –

+0

¿Cómo se guardan las cookies/estado de la sesión? – Chetan

2

Mismo problema aquí. De todas formas, si no quiere reinventar la rueda, puede usar una herramienta como PhoneGap (http://www.phonegap.com/). Contenedor de aplicaciones web nativas con acceso incorporado a una serie de características nativas. Además, almacena la aplicación localmente (rápido, seguro) y, por supuesto, puede cobrar por ella;) Está bajo licencia BSD o MIT.

0

Es posible que desee ver el uso de caché-manifiesto para evitar que se carguen los archivos.

Matt pudo tiene una buena valoración crítica aquí:

http://matt.might.net/articles/how-to-native-iphone-ipad-apps-in-javascript/

Básicamente se cambia la etiqueta html a esta

<html manifest="cache.manifest"> 

y escribir un archivo en el servidor de cache.manifest que especifica qué archivos debe mantenerse en la memoria caché del dispositivo y debe recargarse dinámicamente desde la red.

CACHE MANIFEST 
local1.file 
local2.file 

NETWORK: 
network1.php 
network2.cgi 

También es necesario asegurarse de que su servidor web sirve archivos .manifest con el tipo MIME text/manifiesto, o de lo contrario esto no funcionará. Si estás usando Apache, poner lo siguiente en su archivo .htaccess:

AddType text/cache-manifest .manifest 
+0

Buena explicación, pero desafortunadamente no resuelve el problema de recarga y pérdida de la aplicación web cuando se realizan múltiples tareas. –

+0

Estoy de acuerdo con @ René, la caché de aplicaciones HTML5 no tiene efecto en iOS WebApps ... – Eric

0

actualización: A pesar de que mi respuesta se downvoted, creo que esta es la forma más fácil de tratar con las recargas forzados por iOS. Mi estrategia es y no para evitar que la aplicación web se vuelva a cargar al abrirla, pero le proporciona una forma fácil de mantener activa la sesión para que pueda detectar y restaurar la sesión desde el servidor, de modo que no se produzca el flujo de la aplicación. está roto (según lo solicitado por el OP).

NB; esto funciona más fácilmente si todas las páginas de su aplicación web siempre se abordan a través de la misma URL (por ejemplo, http://webapp.yourdomain.com/index.php); de lo contrario, deberá almacenar la ubicación del usuario en los datos de la sesión en el lado del servidor y reenviar al usuario allí cuando ingrese su aplicación web a través de la URL principal.

Como dije, esto le permite mantener el estado intacto incluso entre los reinicios del dispositivo, por lo que aunque técnicamente no detenga la recarga de la aplicación web cuando se inicia desde la pantalla de inicio, me parece que es la más fácil forma de restaurar el estado para el usuario sin que él/ella note la recarga.


Una solución mucho más fácil que utilizar el almacenamiento local es prolongar la vida útil de su cookie de sesión. Esto funciona en todas las aplicaciones web (siempre que apunten a la misma página, por supuesto), e incluso entre la aplicación web y la versión web regular de su aplicación.

El truco es hacer esto:

// Start or resume session 
session_start(); 

// Extend cookie life time by an amount of your liking 
$cookieLifetime = 365 * 24 * 60 * 60; // A year in seconds 
setcookie(session_name(),session_id(),time()+$cookieLifetime); 

Para una discusión más detallada de esta estrategia se puede echar un vistazo a mi respuesta de esta pregunta:

Maintain PHP Session in web app on iPhone

+2

Esto no impide la recarga, pero mantiene las variables de sesión, lo que parece ser el problema principal, no el hecho de que se esté recargando. – Niclas

+0

Eso es cierto Niclas, gracias por la aclaración. –

Cuestiones relacionadas