Як розширення може дізнатись, що воно запускається вперше або щойно оновлено, щоб розширення могло виконувати певні дії? (наприклад, відкрити сторінку довідки або оновити налаштування)
Як розширення може дізнатись, що воно запускається вперше або щойно оновлено, щоб розширення могло виконувати певні дії? (наприклад, відкрити сторінку довідки або оновити налаштування)
Відповіді:
У новіших версіях 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 + "!");
}
});
Оновлена відповідь для відображення v3 маніфесту:
Chromium тепер має набір API-інтерфейсів chrome.runtime , які дозволяють отримати версію розширення.
Щоб отримати поточну версію:
chrome.runtime.getManifest().version
Щоб прослухати, коли розширення було вперше встановлено, коли оновлення оновлено до нової версії та коли Chromium оновлено до нової версії, ви можете використовувати 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;
}
})
Це все!
Стара відповідь, до 2011 року
Якщо ви хочете перевірити, чи встановлено або оновлено розширення, ви можете зробити щось подібне:
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;
}
prevVersion == 'undefined'
... він перевіряє typeof prevVersion == 'undefined'
. Це набагато надійніше використовувати typeof
при перевірці , якщо змінна не визначена ... дивіться тут , щоб дізнатися , чому: stackoverflow.com/a/3550319/130691
На щастя, зараз для цього є події (починаючи з версії Chrome 22 та 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
, розширення має оновлено.
localStorage
дійсно знаходиться у своєму окремому вікні і не передається іншому коду та розширенням на сторінці, як згадував @huyz. Однак щодо розширень це не так.