setInterval не работает должным образом в веб-расширении Safari

Недавно я перенес свое расширение Chrome на safari с помощью конвертера веб-расширений safari: https://developer.apple.com/documentation/safariservices/safari_web_extensions/converting_a_web_extension_for_safari.

Однако я обнаружил, что мои вызовы setInterval выполнялись на фоновой странице только определенное количество раз. Когда я открываю фоновую страницу своего веб-расширения, я пробовал запустить простой интервал, чтобы увидеть результат:

Фоновая страница веб-расширения Safari с зависанием интервала после выполнения заданного количества раз

Когда я пробую то же самое для своего веб-расширения Chrome, интервал длится бесконечно:

Фоновая страница веб-расширения Chrome с непрерывным интервалом

Если я попытаюсь запустить интервал после открытия консоли разработчика для любой случайной веб-страницы в Safari, интервал будет работать нормально:

Страница содержимого Safari с непрерывным интервалом

Точно так же рекурсивная функция setTimeout не работает на фоновой странице для веб-расширения:

Рекурсивная функция setTimeout на моей фоновой странице Результат рекурсивной функции установки тайм-аута на моей фоновой странице (затем останавливается)

Я не уверен, почему таймеры могут не работать на фоновой странице Safari. Мое расширение отлично работает в chrome / brave / firefox. Спасибо!

2 ответа

Когда расширение не активно, браузер Safari останавливает фоновый процесс этого конкретного расширения.

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

Я видел ту же проблему. был дросселирован после 6 итераций, независимо от интервала. Звонки были, но спорадически, сначала раз в минуту, а потом еще реже.

Я исправил это, переключившись на API тревог вместоsetInterval(). Кажется, работает нормально.

Safari 16.3, macOS 12.6 Монтерей.