mozilla

API de restauración de sesión

Firefox 2 introduce el almacenamiento de sesiones, una nueva caracteristica que hace posible que las extensiones puedan fácilmente, guardar y restaurar datos a lo largo de sesiones de Firefox. Existe una API simple que permite que las extensiones accedan a la caracterìstica de almacenamiento de sesión.

Un escenario clave en el cual proveer esta caracteristica puede ser crucial para una extensión: Firefox 2 deja revertir el cerrado de pestañas. Para poder restaurar correctamente el estado de la extension cuando una pestaña es restaurada, necesita usar el metodo setTabValue() de la API de almacenamiento de sesion, para guardar la informaciòn que necesitarà para restaurar su estado, y luego invocar getTabValue() para obtener la configuraciòn previa cuando la pestaña es recuperada.

La API Almacenamiento de Sesion es implementada usando la interfaz nsISessionStore

Saber cuando restaurar

Cada vez que Firefox està por restaurar una pestaña, un evento de tipo SSTabRestoring es enviado. Si se quiere que la extensión sea capaz de restaurar los datos cuando las pestañas son restauradas, puede instalar un "centinela" como este:

function myExtensionHandleRestore(aEvent) {
  Components.classes["@mozilla.org/consoleservice;1"].
             getService(Components.interfaces.nsIConsoleService).
             logStringMessage("restoring tabs");
};

document.addEventListener("SSTabRestoring", myExtensionHandleRestore, false);

Simplemente se debe reemplazar los contenidos de la función myExtensionHandleRestore() con cualquier cosa que se necesite hacer cuando la pestaña sea restaurada. En este ejemplo, nsIConsoleService es usado para desplegar un mensaje a la Consola.

Este evento es enviado justo antes de la restauracion de una pestaña. Un evento del tipo SSTabRestored es enviado después que la última pestaña ha sido restaurada.

El proceso de restauración de sesión

La secuencia exacta de eventos que ocurre cuando una sesión està siendo restaurada es:

  1. El estado de una sesión está a punto de ser restaurado. Esto puede ser al inicio del programa,o en respuesta a Deshacer Cerrar Pestaña, dado que las pestañas cerradas son restauradas como sesiones de una sola pestaña.
  2. Nuevas ventanas son abiertas como se requirieron (una por cada ventana que fue salvada durante el almacenamiento de sesión), y tanto cookies como la lista de pestañas recièn cerradas son restauradas.

Después de esto, los siguientes pasos son seguidos por cada pestaña que està siendo restaurada:

  1. Se reutiliza una pestaña o se crea una nueva. En el último caso, el evento TabOpen es enviado.
  2. Los atributos persistentes XUL de la pestaña (aquellos que fueron salvados, debido a invocaciones de persistTabAttribute()) y permisos son restaurados.
  3. El evento SSTabRestoring es enviado.
  4. Se le ordena a la pestaña que cargue el URL que deberìa desplegar.
  5. Cuando la página ha terminado de cargar, los campos de texto y barras de desplazamiento son restaurados.
  6. Finalmente, el evento SSTabRestored es enviado.

Si se quiere configurar permisos o manipular de alguna otra forma  una pestaña restaurada antes de que la página sea cargada, debería observar SSTabRestoring. Si se desea hacer algo después de que la pagina ha sido cargada, debería observar SSTabRestored.

Ambos eventos son siempre enviados por cada pestaña que està siendo restaurada. Se puede determinar cual pestaña esta siendo restaurada mirando el campo originalTarget del evento.

No existe una forma para determinar cuàndo ha sido restaurada la última pestaña, a menos que se determine cuantas pestañas necesitan ser restauradas y luego contar los eventos sSTabRestored.

Usando la API de almacenamiento de sesión

Esta sección provee algunos ejemplos de còmo usar la API de almacenamiento de sesión.

Guardando un valor con una pestaña.

El siguiente código adherirà un par llave/valor a una pestaña, asi-cuando èsta sea restaurada-, este par todavía estará asociada a ella.

 var ss = Components.classes["@mozilla.org/browser/sessionstore;1"].
                             getService(Components.interfaces.nsISessionStore);
 var currentTab = getBrowser().selectedTab;
 var dataToAttach = "Yo quiero adherir esto";
 ss.setTabValue(currentTab, "nombre-llave-aqui", dataToAttach);

El código asigna el valor de la llave "nombre-llave-aqui" a dataToAttach. Se puede usar cualquier objeto JavaScript como datos.

Recuperar un valor guardado

Se puede recuperar un valor asociado a una pestaña en cualquier momento (ya sea mientras la pestaña este siendo restaurada o no), usando un código similar al siguiente:

 var ss = Components.classes["@mozilla.org/browser/sessionstore;1"].
                             getService(Components.interfaces.nsISessionStore);
 var currentTab = getBrowser().selectedTab;
 var retrievedData = ss.getTabValue(currentTab, "nombre-llave-aqui");

Despuès  que el código ha sido ejecutado, la variable retrievedData contiene el valor guardado en la llave "nombre-llave-aqui". retrievedData está indefinida si no existe un valor guardado para ese nombre de llave.

Borrando un valor asociado a una pestaña

Para borrar un valor de una pestaña, se puede utilizar un código como el siguiente:

 var ss = Components.classes["@mozilla.org/browser/sessionstore;1"].
                             getService(Components.interfaces.nsISessionStore);
 var currentTab = getBrowser().selectedTab;
 deleteTabValue(currentTab, "nombre-llave-aqui");

Comentarios

El guardado de valores de la ventana y las funciones de restauración, funcionan exactamente como las funciones basadas en pestañas con nombres similares.

Ver También:

nsISessionStore

Etiquetas y colaboradores del documento

Contributors to this page: Nukeador, Mgjbot, DoctorRomi, Javlinux
Última actualización por: DoctorRomi,