Нужно ли ждать обработки документа в сценарии содержимого для расширения Chrome до обработки документа? - PullRequest
31 голосов
/ 25 февраля 2011

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

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

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

Ответы [ 2 ]

59 голосов
/ 25 февраля 2011

На самом деле, вам не нужно ждать. Вы можете сразу обработать в Сценарии содержимого . Просто убедитесь, что вы не используете 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"
    }
  ],
  ...
}
3 голосов
/ 25 февраля 2011

Краткий ответ: да.

Длинный ответ: jQuery не сможет получить элементы DOM, которые еще не были отрисованы. Я знаю, что у меня были проблемы несколько раз, и это может быть довольно раздражающим, чтобы отладить что-то некоторое время, а затем понять, что я забыл обернуть код в документ .ready. Если это работает для вас, это потому, что вам повезло. Кроме того, вам не нужно оборачивать его в документ. Уже, если ваши скрипты находятся внизу вашей страницы, чуть выше закрывающего тега body.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...