Cycle de vie des applications Chrome

L'environnement d'exécution et la page d'événements de l'application permettent de gérer le cycle de vie de l'application. L'environnement d'exécution de l'application gère l'installation de l'application, contrôle la page d'événement et peut arrêter l'application à tout moment. La page des événements écoute les événements de l'environnement d'exécution de l'application et gère ce qui est lancé et comment.

Fonctionnement du cycle de vie

L'environnement d'exécution de l'application charge la page d'événement à partir du bureau d'un utilisateur, et l'événement onLaunch() est déclenché. Cet événement indique à la page d'événement les fenêtres à lancer et leurs dimensions.

Fonctionnement du cycle de vie des applications

Lorsque la page d'événement ne contient aucun code JavaScript exécuté, aucun rappel en attente ni aucune fenêtre ouverte, l'environnement d'exécution décharge la page d'événement et ferme l'application. Avant de décharger la page d'événement, l'événement onSuspend() est déclenché. Cela permet à la page d'événement d'effectuer des tâches de nettoyage simples avant la fermeture de l'application.

Créer une page et des fenêtres d'événement

Toutes les applications doivent disposer d'une page d'événement. Cette page contient la logique de premier niveau de l'application, sans sa propre UI. Elle est chargée de créer les fenêtres de toutes les autres pages de l'application.

Créer une page d'événement

Pour créer la page d'événement, incluez le champ "background" dans le fichier manifeste de l'application et incluez background.js dans le tableau des scripts. Tous les scripts de bibliothèque utilisés par la page d'événement doivent d'abord être ajoutés au champ "arrière-plan" :

"background": {
  "scripts": [
    "foo.js",
    "background.js"
  ]
}

Votre page d'événement doit inclure la fonction onLaunched(). Cette fonction est appelée lorsque votre application est lancée d'une manière ou d'une autre:

chrome.app.runtime.onLaunched.addListener(function() {
  // Tell your app what to launch and how.
});

Créer des fenêtres

Une page d'événement peut créer une ou plusieurs fenêtres à sa seule discrétion. Par défaut, ces fenêtres sont créées avec une connexion de script à la page d'événement et peuvent directement être scriptées par cette page.

Les fenêtres des applications Chrome ne sont associées à aucune fenêtre du navigateur Chrome. Elles ont un cadre facultatif avec une barre de titre et des commandes de taille, ainsi qu'un ID de fenêtre recommandé. Les fenêtres sans ID ne seront pas restaurées à leur taille et à leur emplacement après le redémarrage.

Voici un exemple de fenêtre créée à partir de background.js:

chrome.app.runtime.onLaunched.addListener(function() {
  chrome.app.window.create('main.html', {
    id: 'MyWindowID',
    bounds: {
      width: 800,
      height: 600,
      left: 100,
      top: 100
    },
    minWidth: 800,
    minHeight: 600
  });
});

Inclure les données de lancement

Selon la manière dont votre application est lancée, vous devrez peut-être gérer les données de lancement dans votre page d'événement. Par défaut, aucune donnée de lancement n'est disponible lorsque l'application est démarrée par le lanceur d'applications. Pour les applications comportant des gestionnaires de fichiers, vous devez gérer le paramètre launchData.items pour qu'elles puissent être lancées avec des fichiers.

Écouter les événements d'exécution de l'application

L'environnement d'exécution contrôle les installations, mises à jour et désinstallations de l'application. Aucune action n'est requise de votre part pour configurer l'environnement d'exécution de l'application, mais votre page d'événement peut écouter l'événement onInstalled() pour stocker les paramètres locaux et l'événement onSuspend() pour effectuer des tâches de nettoyage simples avant le déchargement de la page d'événement.

Enregistrement des paramètres locaux

chrome.runtime.onInstalled() est appelé lors de la première installation de votre application ou de sa mise à jour. Chaque fois que cette fonction est appelée, l'événement onInstalled est déclenché. La page de l'événement peut écouter cet événement et utiliser l'API Storage pour stocker et mettre à jour les paramètres locaux (voir aussi Options de stockage).

chrome.runtime.onInstalled.addListener(function() {
  chrome.storage.local.set(object items, function callback);
});

Prévenir la perte de données

Les utilisateurs peuvent désinstaller votre application à tout moment. Une fois désinstallé, il ne reste aucun code en cours d'exécution ni aucune donnée privée. Cela peut entraîner une perte de données, car les utilisateurs peuvent désinstaller une application qui a modifié et désynchronisé des données localement. Vous devez cacher les données pour éviter de les perdre.

Au minimum, stockez les paramètres utilisateur de sorte que, si les utilisateurs réinstallent votre application, leurs informations puissent toujours être réutilisées. À l'aide de l'API Storage (storage.sync), les données utilisateur peuvent être automatiquement synchronisées avec la synchronisation Chrome.

Effectuer un nettoyage avant la fermeture de l'application

L'environnement d'exécution de l'application envoie l'événement onSuspend() à la page d'événement avant de le décharger. Votre page d'événement peut écouter cet événement, effectuer des tâches de nettoyage et enregistrer l'état avant la fermeture de l'application.

Une fois cet événement déclenché, l'environnement d'exécution de l'application lance le processus de fermeture de l'application. Si l'application a des fenêtres ouvertes, il est possible qu'elle soit redémarrée à l'avenir via l'événement onRestarted. Dans ce cas, l'application doit enregistrer son état actuel dans un espace de stockage persistant afin de pouvoir redémarrer dans le même état si elle reçoit un événement onRestarted. L'application ne dispose que de quelques secondes pour enregistrer son état, après quoi elle s'arrêtera. Il est donc conseillé d'enregistrer progressivement l'état de l'application pendant son exécution normale.

Après avoir reçu onSuspend, aucun autre événement n'est envoyé à l'application, sauf si la suspension est annulée pour une raison quelconque. Dans ce cas, l'élément onSuspendCanceled est envoyé à l'application, qui n'est pas déchargée.

chrome.runtime.onSuspend.addListener(function() {
  // Do some simple clean-up tasks.
});