回答:
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が言及したようにページの他のコードや拡張機能と共有されないからです。ただし、拡張機能の場合はそうではありません。