web-dev-qa-db-ja.com

検出Chrome拡張機能の最初の実行/更新

拡張機能が特定のアクションを実行できるように、拡張機能が初めて実行されていること、または更新されたばかりであることをどのようにして見つけることができますか? (例:ヘルプページを開く、設定を更新する)

91
rack1

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 + "!");
    }
});
165
Alvin Wong

マニフェストの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;
  }
67
Mohamed Mansour

幸いなことに、これには events があります(Chromeバージョン22、および更新イベントには25)から)。

インストール済みイベントの場合:

chrome.runtime.onInstalled.addListener(function() {...});

OnUpdateAvailableイベントの場合:

chrome.runtime.onUpdateAvailable.addListener(function() {...});

開発者ドキュメントのOnUpdateAvailableに関する重要な抜粋は次のとおりです。

更新が利用可能になったときに発生しますが、アプリが現在実行されているためすぐにはインストールされません。何もしなければ、更新プログラムは次にバックグラウンドページがアンロードされるときにインストールされます。より早くインストールする場合は、chrome.runtime.reload()を明示的に呼び出すことができます。

19
JVillella

シンプル。拡張機能が最初に実行されたとき、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!');

EDIT:拡張機能が更新されたかどうかを確認するには、最初の実行時に単純なフラグの代わりにバージョンを保存し、次に現在の拡張機能バージョン(XmlHttpRequestingマニフェストで取得) localStorageに保存されているものと等しくない場合、拡張子が更新されました。

9
Max Shawabkeh