Как добиться загрузки контентного скрипта ПОСЛЕ выполнения Javascript на странице?
У меня есть расширение для браузера, которое должно загружать контентный скрипт searchTopic.js
только после полной загрузки страницы, в которую он внедряется (да, я установил параметр "run_at"
в "document_end"
в манифесте расширения), но на самом деле скрипт загружается раньше, чем все объекты DOM были созданы (критически важные объекты создаются с помощью JavaScript на странице).
В связи с этим у меня возникает вопрос: как мне дождаться выполнения JavaScript на странице? Вот мой манифест:
"content_scripts": [
{
"run_at": "document_end",
"matches": ["https://groups.google.com/forum/*"],
"js": ["searchTopic.js"]
}
],
Как я могу решить эту проблему, чтобы скрипт выполнялся только после завершения всех операций на странице?
1 ответ(ов)
Элементы script
выполняются в порядке их появления на странице. Браузер даже прекращает загрузку контента DOM, если в body
есть узлы script
. Это работает гарантированно, иначе document.write()
перестало бы функционировать.
Так что у вас есть два решения:
- Используйте событие
onload
для загрузки вашего кода. - Добавьте тег
<script>
в качестве последнего элемента страницы (последнего в элементеbody
). Этот скрипт будет выполнен после того, как все остальные скрипты завершат свою работу и после того, как тело будет преобразовано в дерево DOM.
Доступ к переменным и функциям, определённым в контексте страницы, из расширения
Ошибка sendRequest в Chrome: TypeError: Преобразование циклической структуры в JSON
Где найти документацию по форматированию даты в JavaScript?
Как проверить, содержит ли массив строку в TypeScript?
Ссылка и выполнение внешнего JavaScript-файла, размещенного на GitHub