2015-05-17 1 views
1

Контекст: Я создаю программу, которая извлекает основной контент с веб-страницы. Однако в настоящее время то, что я делаю, ждет загрузки и рендеринга всей веб-страницы (что может занять много времени, особенно для страниц с большим количеством скриптов).Расширение Chrome: Получение html страницы до того, как страница будет отображаться/загружается

Что я хочу, так это просто получить html страницы справа, когда страница начнет загружаться, поэтому я могу извлечь основной контент, не дожидаясь, пока вся веб-страница будет отображаться и загружаться.

run_at: "document_start" 

в файле mainfest.json не работает, потому что он запускается до появления html.

ответ

4

Использование run_at: "document_start" с DOMContentLoaded слушателя событий (или MutationObserver, если вы хотите обработать документ в то время как это загрузка) в скрипте содержимого.

+0

«Событие DOMContentLoaded запускается, когда исходный HTML-документ ** полностью загружен и проанализирован **« [Из MDN] (https://developer.mozilla.org/EN-US/Docs/Web/События/DOMContentLoaded). Если вы ожидаете событие 'DOMConentLoaded', то нет никакой разницы с' document_end'. Я голосую в этом, потому что это не решает проблему, которая «делает xxx прямо, когда страница начинает загружаться». – VicX

+1

@ VicX, разница в том, что для ввода сценариев контента требуется время. Chrome делает много промежуточных вещей, когда создает среду выполнения. Разработчики хрома распознают проблему и работают над оптимизацией, например. js привязки переписываются в C++. – wOxxOm

0

Вы должны попробовать "document_end", он должен работать раньше, чем по умолчанию "document_idle".

+0

однако document_end также может занимать гораздо больше времени, чем необходимо, особенно если на странице есть iframes (для выполнения google auth, например, для внесетей). Я недавно сменил мое расширение на document_start с большим успехом, но должен был исправить некоторые библиотеки, которые ожидали, что dom будет там во время загрузки скрипта (вместо этого он перенесет этот init позже). если html еще нет, просто подождите его с таймаутами/интервалом –

Смежные вопросы