Bagaimana ekstensi mengetahui bahwa ekstensi sedang dijalankan untuk pertama kali atau baru saja diperbarui, sehingga ekstensi dapat melakukan beberapa tindakan tertentu? (mis. buka halaman bantuan atau perbarui pengaturan)
Bagaimana ekstensi mengetahui bahwa ekstensi sedang dijalankan untuk pertama kali atau baru saja diperbarui, sehingga ekstensi dapat melakukan beberapa tindakan tertentu? (mis. buka halaman bantuan atau perbarui pengaturan)
Jawaban:
Di versi Chrome yang lebih baru (sejak Chrome 22), Anda dapat menggunakan chrome.runtime.onInstalled
acara tersebut, yang jauh lebih bersih.
Contoh:
// 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 + "!");
}
});
Jawaban yang diperbarui untuk mencerminkan v3 dari manifes:
Chromium sekarang memiliki sekumpulan API chrome.runtime , yang memungkinkan Anda mengambil versi ekstensi.
Untuk mendapatkan versi saat ini:
chrome.runtime.getManifest().version
Untuk mendengarkan saat ekstensi pertama kali dipasang, saat ekstensi diperbarui ke versi baru, dan saat Chromium diperbarui ke versi baru, Anda dapat menggunakan onInstalled
acara tersebut.
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;
}
})
Itu saja!
Jawaban lama, sebelum 2011
Jika Anda ingin memeriksa apakah ekstensi telah dipasang atau diperbarui, Anda dapat melakukan sesuatu seperti ini:
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'
... dia sedang memeriksa typeof prevVersion == 'undefined'
. Ini jauh lebih kuat untuk digunakan typeof
saat memeriksa apakah suatu variabel tidak ditentukan ... lihat di sini untuk mempelajari alasannya: stackoverflow.com/a/3550319/130691
Untungnya, sekarang ada acara untuk ini (sejak Chrome versi 22, dan 25 untuk acara pembaruan).
Untuk acara terinstal:
chrome.runtime.onInstalled.addListener(function() {...});
Untuk acara OnUpdateAvailable:
chrome.runtime.onUpdateAvailable.addListener(function() {...});
Kutipan penting tentang OnUpdateAvailable dari dokumen pengembang mengatakan:
Diaktifkan ketika pembaruan tersedia, tetapi tidak segera dipasang karena aplikasi sedang berjalan. Jika Anda tidak melakukan apa-apa, pembaruan akan dipasang saat halaman latar belakang dibongkar, jika ingin lebih cepat dipasang, Anda dapat memanggil chrome.runtime.reload () secara eksplisit.
Sederhana. Saat ekstensi pertama kali dijalankan, ekstensi localStorage
kosong. Saat pertama kali dijalankan, Anda dapat menulis sebuah tanda di sana untuk menandai semua proses konsekuen sebagai non-first.
Contoh, di 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: Untuk memeriksa apakah ekstensi baru saja diperbarui, simpan versi alih-alih bendera sederhana saat pertama kali dijalankan, lalu ketika versi ekstensi saat ini (dapatkan dengan XmlHttpRequest
menggunakan manifes) tidak sama dengan yang disimpan di dalamnya localStorage
, ekstensi memiliki telah diperbarui.
localStorage
memang berada di jendela terpisahnya sendiri dan tidak dibagikan dengan kode dan ekstensi lain di halaman seperti yang disebutkan @huyz. Untuk ekstensi, bagaimanapun, ini tidak terjadi.