Определить расширение Chrome при первом запуске / обновлении
Как расширение может узнать, что оно запускается впервые или только что было обновлено, чтобы расширение могло выполнять некоторые конкретные действия? (например, открыть страницу справки или обновить настройки)
4 ответа
В более новых версиях Chrome (начиная с Chrome 22) вы можете использовать chrome.runtime.onInstalled
событие, которое намного чище.
Пример:
// 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 + "!");
}
});
Если вы хотите проверить, было ли расширение установлено или обновлено, вы можете сделать что-то вроде этого:
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;
}
К счастью, теперь есть события для этого (начиная с версии 22 Chrome и 25 для событий обновления).
Для установленного события:
chrome.runtime.onInstalled.addListener(function() {...});
Для события OnUpdateAvailable:
chrome.runtime.onUpdateAvailable.addListener(function() {...});
Важный отрывок об OnUpdateAvailable из документации для разработчиков гласит:
Запускается, когда обновление доступно, но не устанавливается сразу, потому что приложение в данный момент запущено. Если вы ничего не сделаете, обновление будет установлено в следующий раз, когда фоновая страница будет выгружена, если вы хотите, чтобы оно было установлено раньше, вы можете явно вызвать chrome.runtime.reload().
Просто. При первом запуске расширения localStorage
пустой. При первом запуске вы можете написать флаг, чтобы пометить все последующие запуски как не первые.
Пример в 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!');
РЕДАКТИРОВАТЬ: Чтобы проверить, было ли расширение только что обновлено, сохранить версию вместо простого флага при первом запуске, а затем при текущей версии расширения (получить его по XmlHttpRequest
в манифесте) не совпадает с тем, что хранится в localStorage
, расширение было обновлено.