Как запустить скрипт сразу после загрузки головы, но до DOM? - PullRequest
7 голосов
/ 05 июня 2010

Создание расширения Google Chrome и необходимость запуска скрипта после загрузки заголовка, потому что в голове есть скрипты, и они нужны мне для запуска. И до загрузки DOM, потому что там есть встроенный скрипт, который мне нужно разбить.

Как бы я это сделал? Как я могу определить, когда голова загружается?

Ответы [ 2 ]

4 голосов
/ 05 июня 2010

Когда вы внедряете свой скрипт контента, в манифесте вы можете указать для параметра «run_at» значение «document_start», файлы внедряются после любых файлов из css, но до создания любого другого DOM или запуска любого другого скрипта , Более подробную информацию можно найти здесь .

{
  "name": "My extension",
  ...
  "content_scripts": [
    {
      "matches": ["http://www.google.com/*"],
      "css": ["mystyles.css"],
      "js": ["jquery.js", "myscript.js"],
      "run_at": "document_start"
    }
  ],
  ...
}

* Отредактировано, добавлен пример. Можно использовать один из типов мутаций типов.

Пример

manifest.json

{
  "name": "Content Script test",
  "version": "0.1",
  "description": "Content Script test",
  "content_scripts": [
    {
      "matches": ["http://*/*"],
      "js": ["cs.js"],
      "run_at": "document_start",
      "all_frames": true
    }
  ]
}

cs.js

document.addEventListener('DOMSubtreeModified', OnSubtreeModified, false);

function OnSubtreeModified(event) {
  console.log('Hello from extension!');
  document.removeEventListener('DOMSubtreeModified', OnSubtreeModified, false);
}

test.html (где-то в сети)

<html>
<head>
  <script>
    alert('Hello from Web!');
  </script>
</head>
<body>
<h1>Hello World!</h1>
</body>
</html>

Результаты

У вас будет два оповещения, в порядке:

  1. Привет из сети!
  2. Привет от расширения!
2 голосов
/ 05 июня 2010

Просто поместите его в верхнюю часть тега <body>. Сценарии выполняются там, где они размещены, и блокируют остальную часть страницы, поэтому сценарий в верхней части тела будет знать обо всем в голове, но не будет знать об остальной части DOM, которая все еще загружается. Если вы разместите его в нижней части <body>, он все еще будет до DOMReady и до события загрузки страницы, плюс вы сможете получить доступ к элементам DOM, которые предшествовали сценарию. Один из способов может быть полезен, если вам нужно динамически добавлять сценарии к <head> - вы не можете сделать это с помощью сценария, который находится внутри <head>, поэтому вы должны сделать это в <body>.

[Редактировать] Мой ответ может быть применен в целом к ​​любому документу HTML, но ответ Мохамеда более применим к расширениям Google. Я был бы склонен опередить его ответ, хотя оба, вероятно, верны.

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