Bir uzantı, uzantının bazı belirli eylemleri gerçekleştirebilmesi için ilk kez çalıştırıldığını veya yeni güncellendiğini nasıl öğrenebilir? (örneğin bir yardım sayfası açın veya ayarları güncelleyin)
Bir uzantı, uzantının bazı belirli eylemleri gerçekleştirebilmesi için ilk kez çalıştırıldığını veya yeni güncellendiğini nasıl öğrenebilir? (örneğin bir yardım sayfası açın veya ayarları güncelleyin)
Yanıtlar:
Chrome'un daha yeni sürümlerinde (Chrome 22'den beri), chrome.runtime.onInstalled
çok daha temiz olan etkinliği kullanabilirsiniz .
Misal:
// 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 + "!");
}
});
Manifest'in v3'ünü yansıtacak şekilde güncellenmiş yanıt:
Chromium artık, uzantının sürümünü getirmenize olanak tanıyan bir chrome.runtime API kümesine sahiptir .
Mevcut sürümü almak için:
chrome.runtime.getManifest().version
Uzantı ilk yüklendiğinde, uzantı yeni bir sürüme güncellendiğinde ve Chromium yeni bir sürüme güncellendiğinde dinlemek için onInstalled
etkinliği kullanabilirsiniz .
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;
}
})
Bu kadar!
2011 öncesi eski cevap
Uzantının yüklenip yüklenmediğini kontrol etmek istiyorsanız, aşağıdaki gibi bir şey yapabilirsiniz:
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'
... kontrol ediyor typeof prevVersion == 'undefined'
. typeof
Bir değişkenin tanımsız olup olmadığını kontrol ederken kullanmak çok daha sağlamdır ... nedenini öğrenmek için buraya bakın: stackoverflow.com/a/3550319/130691
Neyse ki, artık bunun için etkinlikler var (güncelleme etkinlikleri için Chrome sürüm 22 ve 25'ten beri).
Yüklü bir olay için:
chrome.runtime.onInstalled.addListener(function() {...});
OnUpdateAvailable etkinliği için:
chrome.runtime.onUpdateAvailable.addListener(function() {...});
Geliştirici belgelerinden OnUpdateAvailable hakkında önemli bir alıntı şöyle diyor:
Bir güncelleme mevcut olduğunda tetiklenir, ancak uygulama şu anda çalıştığı için hemen yüklenmez. Hiçbir şey yapmazsanız, güncelleme arka plan sayfasının bir sonraki yüklemesi kaldırıldığında yüklenecektir, daha erken yüklenmesini istiyorsanız, chrome.runtime.reload () öğesini açıkça çağırabilirsiniz.
Basit. Uzantı ilk çalıştığında localStorage
boştur. İlk çalıştırmada, tüm ardışık işlemleri ilk olmayan olarak işaretlemek için oraya bir bayrak yazabilirsiniz.
Örnek, background.htm'de:
var first_run = false;
if (!localStorage['ran_before']) {
first_run = true;
localStorage['ran_before'] = '1';
}
if (first_run) alert('This is the first run!');
DÜZENLEME: Uzantının henüz güncellenip güncellenmediğini kontrol etmek için, ilk çalıştırmada basit bir bayrak yerine sürümü depolayın, ardından mevcut uzantı sürümü ( XmlHttpRequest
manifest'i kullanarak elde edin), içinde depolananla aynı olmadığında localStorage
, uzantı güncellendi.
localStorage
aslında kendi ayrı penceresinde olduğu ve @ huyz'un bahsettiği sayfadaki diğer kod ve uzantılarla paylaşılmadığı için arka plan sayfalarında kullanım için kesin bir çözümdür . Ancak uzantılar için durum böyle değil.