Требуется обходной путь для вызова alert() из фонового скрипта

Вызов alert() из фонового скрипта разрешен в Google Chrome, но не в Firefox (WebExtensions), на который я переношу свое расширение Chrome.

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

Отправка сообщения сценарию содержимого для вызова alert() будет недостаточно, поскольку никакие сценарии содержимого не могут быть загружены в то время, когда требуется вызов предупреждения.


person AlJo    schedule 15.08.2016    source источник
comment
То, как вы это сформулировали, звучит так, будто вы не примете никакого решения, кроме фактического alert() диалога, даже того, что выглядит и ощущается как таковое. Если да, то вы SOL. Текст, выводимый в консоли alert(), не поддерживается в фоновых окнах; пожалуйста, используйте вместо него console.log. ясно. alert() не поддерживается в фоновых сценариях. Если вам нужна дополнительная информация, вы можете проверить Ошибка 1203394 — alert() не работает в фоновом режиме. scripts, который РАЗРЕШЕН ИСПРАВЛЕНО с выводом этой консоли в качестве результата.   -  person Makyen♦    schedule 15.08.2016
comment
Для ясности: примете ли вы замену, которая работает как в Firefox, так и в Google Chrome, которая близка к тому, чтобы выглядеть и действовать как alert()?   -  person Makyen♦    schedule 15.08.2016
comment
Также, чтобы внести ясность: для вас неприемлемо иметь в качестве решения загрузку сценария контента для выполнения alert(). Это не говорит об отправке сообщения уже загруженному сценарию контента, а фактически загружает его специально для решения этой проблемы. Это неприемлемое решение для вас, верно?   -  person Makyen♦    schedule 15.08.2016
comment
@Makyen Попробуйте.   -  person AlJo    schedule 15.08.2016
comment
@Makyen Я знаю, что alert() не поддерживается в скриптах bg. Вот почему вопрос требует обходного решения. Чистый?   -  person AlJo    schedule 16.08.2016
comment
Но затем вы говорите Я не прошу ничего, кроме диалогового окна предупреждения. Это утверждение противоречит поиску обходного пути, который дает пользователю разумное ощущение, близкое к диалоговому alert(). Это означает, что единственное, что приемлемо для вас, это диалоговое окно с предупреждением, и вы хотите каким-то образом вызвать этот код в фоновом сценарии (что маловероятно). Именно из-за этого заявления я попросил разъяснений. Если вам нужно что-то близкое к диалогу alert(), то это возможно.   -  person Makyen♦    schedule 16.08.2016
comment
@Makyen, ты делаешь необдуманные предположения. Если вы не можете ответить на поставленный вопрос, пусть это вас не беспокоит; просто двигаться вперед.   -  person AlJo    schedule 16.08.2016


Ответы (1)


Мой обходной путь - сохранить код предупреждения в строке, например:

var alertWindow = 'alert(message)';

и пусть фоновый скрипт вводит этот код, например:

browser.tabs.executeScript({code : alertWindow});
person GrafZahl    schedule 09.01.2017
comment
Этот хак не работает, когда активная вкладка, например. страница about:, новая вкладка и другие подобные ситуации, и именно здесь мне нужно показать сообщение об ошибке и предложение, как обойти проблему. Любые другие идеи? - person gregko; 12.10.2017
comment
Обратите внимание, что вам нужны разрешения хоста для внедрения на текущую страницу. К счастью, в большинстве случаев разрешения activeTab достаточно. Однако вариант использования gregko требует дополнительной работы. Вариантом может быть открытие видимой страницы расширения для этого в случае сбоя инъекции; громоздкий точно. - person Xan; 14.11.2018