setInterval не работает должным образом в веб-расширении Safari
Недавно я перенес свое расширение Chrome на safari с помощью конвертера веб-расширений safari: https://developer.apple.com/documentation/safariservices/safari_web_extensions/converting_a_web_extension_for_safari.
Однако я обнаружил, что мои вызовы setInterval выполнялись на фоновой странице только определенное количество раз. Когда я открываю фоновую страницу своего веб-расширения, я пробовал запустить простой интервал, чтобы увидеть результат:
Когда я пробую то же самое для своего веб-расширения Chrome, интервал длится бесконечно:
Фоновая страница веб-расширения Chrome с непрерывным интервалом
Если я попытаюсь запустить интервал после открытия консоли разработчика для любой случайной веб-страницы в Safari, интервал будет работать нормально:
Страница содержимого Safari с непрерывным интервалом
Точно так же рекурсивная функция setTimeout не работает на фоновой странице для веб-расширения:
Рекурсивная функция setTimeout на моей фоновой странице Результат рекурсивной функции установки тайм-аута на моей фоновой странице (затем останавливается)
Я не уверен, почему таймеры могут не работать на фоновой странице Safari. Мое расширение отлично работает в chrome / brave / firefox. Спасибо!
2 ответа
Когда расширение не активно, браузер Safari останавливает фоновый процесс этого конкретного расширения.
Альтернативный подход: вы можете периодически создавать тайм-аут в сценарии содержимого и фон сообщения из сценария содержимого, чтобы проверять ваши требования.
Я видел ту же проблему. был дросселирован после 6 итераций, независимо от интервала. Звонки были, но спорадически, сначала раз в минуту, а потом еще реже.
Я исправил это, переключившись на API тревог вместоsetInterval()
. Кажется, работает нормально.
Safari 16.3, macOS 12.6 Монтерей.