web-dev-qa-db-fra.com

Détecter Chrome extension première exécution / mise à jour

Comment une extension peut-elle savoir qu'elle est exécutée pour la première fois ou vient d'être mise à jour, afin que l'extension puisse effectuer certaines actions spécifiques? (par exemple, ouvrir une page d'aide ou mettre à jour les paramètres)

91
rack1

Dans les versions plus récentes de Chrome (depuis Chrome 22), vous pouvez utiliser le chrome.runtime.onInstalled événement, qui est beaucoup plus propre.

Exemple:

// Check whether new version is installed
chrome.runtime.onInstalled.addListener(function(details){
    if(details.reason == "install"){
        console.log("This is a first install!");
    }else if(details.reason == "update"){
        var thisVersion = chrome.runtime.getManifest().version;
        console.log("Updated from " + details.previousVersion + " to " + thisVersion + "!");
    }
});
165
Alvin Wong

Réponse mise à jour pour refléter la version 3 du manifeste:

Chromium dispose désormais d'un chrome.runtime ensemble d'API, qui vous permet de récupérer la version de l'extension.

Pour obtenir la version actuelle:

chrome.runtime.getManifest().version

Pour écouter la première installation de l'extension, la mise à jour de l'extension vers une nouvelle version et la mise à jour de Chromium vers une nouvelle version, vous pouvez utiliser l'événement onInstalled.

chrome.runtime.onInstalled.addListener((details) => {
   const currentVersion = chrome.runtime.getManifest().version
   const previousVersion = details.previousVersion
   const reason = details.reason

   console.log('Previous Version: ${previousVersion }')
   console.log('Current Version: ${currentVersion }')

   switch (reason) {
      case 'install':
         console.log('New User installed the extension.')
         break;
      case 'update':
         console.log('User has updated their extension.')
         break;
      case 'chrome_update':
      case 'shared_module_update':
      default:
         console.log('Other install events within the browser')
         break;
   }

})

C'est tout!


Ancienne réponse, avant 2011

Si vous souhaitez vérifier si l'extension a été installée ou mise à jour, vous pouvez faire quelque chose comme ceci:

  function onInstall() {
    console.log("Extension Installed");
  }

  function onUpdate() {
    console.log("Extension Updated");
  }

  function getVersion() {
    var details = chrome.app.getDetails();
    return details.version;
  }

  // Check if the version has changed.
  var currVersion = getVersion();
  var prevVersion = localStorage['version']
  if (currVersion != prevVersion) {
    // Check if we just installed this extension.
    if (typeof prevVersion == 'undefined') {
      onInstall();
    } else {
      onUpdate();
    }
    localStorage['version'] = currVersion;
  }
67
Mohamed Mansour

Heureusement, il existe maintenant événements pour cela (depuis Chrome version 22, et 25 pour les événements de mise à jour).

Pour un événement installé:

chrome.runtime.onInstalled.addListener(function() {...});

Pour un événement OnUpdateAvailable:

chrome.runtime.onUpdateAvailable.addListener(function() {...});

Un extrait important sur OnUpdateAvailable from the developer docs dit:

Déclenché lorsqu'une mise à jour est disponible, mais n'est pas installée immédiatement car l'application est en cours d'exécution. Si vous ne faites rien, la mise à jour sera installée la prochaine fois que la page d'arrière-plan sera déchargée, si vous voulez qu'elle soit installée plus tôt, vous pouvez explicitement appeler chrome.runtime.reload ().

19
JVillella

Facile. Lors de la première exécution de l'extension, le localStorage est vide. Lors de la première exécution, vous pouvez y écrire un indicateur pour marquer toutes les exécutions suivantes comme non premières.

Exemple, dans background.htm:

var first_run = false;
if (!localStorage['ran_before']) {
  first_run = true;
  localStorage['ran_before'] = '1';
}

if (first_run) alert('This is the first run!');

EDIT: Pour vérifier si l'extension vient d'être mise à jour, stockez la version au lieu d'un simple indicateur lors de la première exécution, puis lorsque la version d'extension actuelle (obtenez-la par XmlHttpRequesting le manifeste) n'est pas égal à celui stocké dans localStorage, l'extension a été mise à jour.

9
Max Shawabkeh