Comment une extension peut-elle savoir qu'elle est en cours d'exécution pour la première fois ou qu'elle vient d'être mise à jour, de sorte qu'elle puisse effectuer certaines actions spécifiques? (par exemple, ouvrir une page d'aide ou mettre à jour les paramètres)
Réponses
Trop de publicités? Dans les versions plus récentes de Chrome (depuis Chrome 22), vous pouvez utiliser l'événement chrome.runtime.onInstalled
, 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 + "!");
}
});
Si vous voulez 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;
}
Heureusement, il existe maintenant des événements (depuis la version Chrome 22, et 25 pour les événements de mise à jour).
Une installation d'événement:
chrome.runtime.onInstalled.addListener(function() {...});
Pour un OnUpdateAvailable événement:
chrome.runtime.onUpdateAvailable.addListener(function() {...});
Un important extrait de OnUpdateAvailable par le développeur docs dit:
Déclenché quand une mise à jour est disponible, mais n'est pas installé immédiatement, car l'application est actuellement en cours d'exécution. Si vous ne faites rien, la mise à jour sera installée la prochaine fois que le fond de page est déchargé, si vous voulez qu'il soit installé plus tôt vous pouvez appeler explicitement chrome.moment de l'exécution.reload().
Simple. Lorsque l'extension exécute tout d'abord, l' localStorage
est vide. À la première exécution, vous pouvez écrire un drapeau là pour marquer tous les conséquente s'exécute en tant que non-autochtones.
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 a été mis à jour, de stocker la version au lieu d'un simple drapeau lors de la première exécution, puis lors de l'extension actuelle version (l'obtenir en XmlHttpRequest
ing le manifeste) n'est pas égal à celui qui est stocké dans localStorage
, l'extension a été mis à jour.