Расширение onUpdateAvailable путаница

В моем расширении есть постоянный фоновый скрипт, и я хотел бы, чтобы он уведомлял пользователя, когда доступно обновление.

Насколько я понимаю, если доступно обновление, расширение будет автоматически обновлено после того, как пользователь перезапустит 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. Как это возможно, если нет обработчиков события?
  2. Моя функция правильная?
  3. Как я могу проверить это?

Проблема

Я попытался установить версию 1.0.0 (текущая последняя версия намного выше) и загрузить ее как расширение, находящееся в разработке, но приглашение не появилось.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
0
242
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваша функция верна, хотя я бы использовал 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() внутри.

Если я правильно понимаю, в моем случае (постоянный фон) этот прослушиватель событий на самом деле не нужен, так как расширение будет обновляться, как только будет выполнена проверка и доступно обновление? Но если мой фон не был постоянным, он обновлялся, когда фон выгружался. Итак, возникает вопрос, какова цель этого прослушивателя событий?

lbragile 15.12.2020 18:56

Цель состоит в том, чтобы выполнить обновление в выбранное вами время и/или уведомить об этом и так далее.

wOxxOm 15.12.2020 19:08

О, хорошо, я думаю, теперь я вижу. В основном для непостоянного фона он выгружается во время работы расширения, но этот прослушиватель событий может предупредить о событии обновления до того, как оно будет выгружено. Спасибо!

lbragile 15.12.2020 19:23

Другие вопросы по теме