Обнаружение первого запуска/обновления Chrome

Как расширение может узнать, что оно выполняется в первый раз или только что обновлено, чтобы расширение могло выполнять определенные действия? (например, откройте страницу справки или настройки обновления)

Ответ 1

В новых версиях 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 + "!");
    }
});

Ответ 2

Если вы хотите проверить, было ли установлено или обновлено расширение, вы можете сделать что-то вроде этого:

  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;
  }

Ответ 3

К счастью, сейчас есть события (начиная с версии для Chrome 22 и 25 для обновлений).

Для установленного события:

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

Для события OnUpdateAvailable:

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

Важная выдержка из OnUpdateAvailable из документов разработчика гласит:

Запущен, когда обновление доступно, но не установлено сразу, потому что приложение в настоящее время запущено. Если вы ничего не сделаете, обновление будет установлено при следующей загрузке фоновой страницы, если вы хотите, чтобы она была установлена ​​раньше, вы можете явно вызвать chrome.runtime.reload().

Ответ 4

Simple. Когда сначала выполняется расширение, 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, расширение было обновлено.