В моем расширении есть постоянный фоновый скрипт, и я хотел бы, чтобы он уведомлял пользователя, когда доступно обновление.
Насколько я понимаю, если доступно обновление, расширение будет автоматически обновлено после того, как пользователь перезапустит Chrome (из-за постоянного фонового сценария). По этой причине хочу добавить следующее:
chrome.runtime.onUpdateAvailable.addListener((details) => {
var response = window.confirm(`${details.version} is now available`);
if (response) {
chrome.runtime.reload();
}
});
От: https://developer.chrome.com/docs/extensions/reference/runtime/#event-onUpdateAvailable
onUpdateAvailable
chrome.runtime.onUpdateAvailable.addListener(listener: function)
Fired when an update is available, but isn't installed immediately because the app is currently running.
If you do nothing, the update will be installed the next time the background page gets unloaded, if you want it to be installed sooner you can explicitly call chrome.runtime.reload().
If your extension is using a persistent background page, the background page of course never gets unloaded, so unless you call chrome.runtime.reload() manually in response to this event the update will not get installed until the next time chrome itself restarts.
If no handlers are listening for this event, and your extension has a persistent background page, it behaves as if chrome.runtime.reload() is called in response to this event.
Я не понимаю последнюю фразу:
Если обработчики этого события не прослушиваются, а ваше расширение имеет постоянную фоновую страницу, оно ведет себя так, как будто в ответ на это событие вызывается chrome.runtime.reload().
Я попытался установить версию 1.0.0 (текущая последняя версия намного выше) и загрузить ее как расширение, находящееся в разработке, но приглашение не появилось.
Ваша функция верна, хотя я бы использовал chrome.windows.create с type
из popup
, чтобы показать неблокирующий диалог в html, отчасти потому, что подтверждение/предупреждение/подсказка не работают в Firefox при вызове в фоновом сценарии.
Как я могу проверить это?
https://stackoverflow.com/a/26276485
я не понимаю последнюю фразу
В документации расширения есть довольно много плохо сформулированных фрагментов, поэтому мы прочитаем исходный код:
if (extensions::BackgroundInfo::HasPersistentBackgroundPage(old)) {
const char kOnUpdateAvailableEvent[] = "runtime.onUpdateAvailable";
return extensions::EventRouter::Get(profile_)->ExtensionHasEventListener(
extension->id(), kOnUpdateAvailableEvent)
? DELAY
: INSTALL;
}
Таким образом, документацию можно было бы улучшить следующим образом:
Если никакие обработчики не прослушивают это событие в расширении с постоянной фоновой страницей, Chrome сразу же обновляет расширение, вызывая chrome.runtime.reload() внутри.
Цель состоит в том, чтобы выполнить обновление в выбранное вами время и/или уведомить об этом и так далее.
О, хорошо, я думаю, теперь я вижу. В основном для непостоянного фона он выгружается во время работы расширения, но этот прослушиватель событий может предупредить о событии обновления до того, как оно будет выгружено. Спасибо!
Если я правильно понимаю, в моем случае (постоянный фон) этот прослушиватель событий на самом деле не нужен, так как расширение будет обновляться, как только будет выполнена проверка и доступно обновление? Но если мой фон не был постоянным, он обновлялся, когда фон выгружался. Итак, возникает вопрос, какова цель этого прослушивателя событий?