Подтвердить что ты не робот

В содержимом расширения Chrome script должен ли я ждать document.ready перед обработкой документа?

В частности, я оцениваю все изображения на странице, чтобы увидеть, есть ли у них определенный атрибут, а затем добавление некоторых новых <divs> в DOM на основе этих атрибутов. Должен ли я ждать document.ready для запуска перед выполнением этих изменений, чтобы гарантировать, что Chrome загрузил все необходимые фрагменты DOM?

Проблема, с которой я столкнулся, заключается в том, что иногда document.ready занимает короткое время, и пользователь уже просматривает страницу, задаваясь вопросом, почему мое расширение еще не имеет никакого эффекта. Проблема обычно длится всего лишь минуту, но этого достаточно, чтобы раздражать.

Если я не буду ждать документа document.ready и вместо этого немедленно обработать документ, все, похоже, сработает; но мне интересно, просто ли мне повезет.

4b9b3361

Ответ 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, которые еще не были обработаны. Я знаю, что несколько раз сталкивался с проблемой, и может быть довольно неприятно отлаживать что-то на некоторое время, а потом понять, что я забыл обернуть код в документе. Если он работает на вас, это потому, что вам повезло. Кроме того, вам не нужно обертывать его в документе. Если ваши скрипты находятся внизу вашей страницы, чуть выше вашего закрывающего тега тела.