В содержимом расширения Chrome script должен ли я ждать document.ready перед обработкой документа?
В частности, я оцениваю все изображения на странице, чтобы увидеть, есть ли у них определенный атрибут, а затем добавление некоторых новых <divs> в DOM на основе этих атрибутов. Должен ли я ждать document.ready для запуска перед выполнением этих изменений, чтобы гарантировать, что Chrome загрузил все необходимые фрагменты DOM?
Проблема, с которой я столкнулся, заключается в том, что иногда document.ready занимает короткое время, и пользователь уже просматривает страницу, задаваясь вопросом, почему мое расширение еще не имеет никакого эффекта. Проблема обычно длится всего лишь минуту, но этого достаточно, чтобы раздражать.
Если я не буду ждать документа document.ready и вместо этого немедленно обработать документ, все, похоже, сработает; но мне интересно, просто ли мне повезет.
Ответы
Ответ 1
Собственно, вам не нужно ждать. Вы можете сразу обработать Скрипты содержимого. Просто убедитесь, что вы не используете document_start
в атрибуте run_at
.
В document_end
файлы вводятся сразу после завершения DOM, но до того, как загрузились подресурсы, такие как изображения и кадры. document_idle
(значение по умолчанию) происходит еще позже.
{
"name": "My extension",
...
"content_scripts": [
{
"matches": ["http://www.google.com/*"],
"css": ["mystyles.css"],
"js": ["jquery.js", "myscript.js"],
"run_at": "document_end"
}
],
...
}
Ответ 2
Короткий ответ: да.
Длинный ответ: jQuery не сможет захватить любые элементы DOM, которые еще не были обработаны. Я знаю, что несколько раз сталкивался с проблемой, и может быть довольно неприятно отлаживать что-то на некоторое время, а потом понять, что я забыл обернуть код в документе. Если он работает на вас, это потому, что вам повезло. Кроме того, вам не нужно обертывать его в документе. Если ваши скрипты находятся внизу вашей страницы, чуть выше вашего закрывающего тега тела.