Манифест — скрипты контента

Ключ "content_scripts" указывает статически загружаемый файл JavaScript или CSS, который будет использоваться каждый раз при открытии страницы, соответствующей определенному шаблону URL-адреса . Расширения также могут программно вставлять сценарии содержимого. Подробности см. в разделе «Внедрение сценариев» .

Манифест

Это поддерживаемые ключи для "content_scripts" . Требуется только ключ "matches" и "js" или "css" .

манифест.json

{
 "name": "My extension",
 ...
 "content_scripts": [
   {
     "matches": ["https://*.example.com/*"],
     "css": ["my-styles.css"],
     "js": ["content-script.js"],
     "exclude_matches": ["*://*/*foo*"],
     "include_globs": ["*example.com/???s/*"],
     "exclude_globs": ["*bar*"],     
     "all_frames": false,
     "match_origin_as_fallback": false,
     "match_about_blank": false,
     "run_at": "document_idle",
     "world": "ISOLATED",
   }
 ],
 ...
}

Файлы

Каждый файл должен содержать относительный путь к ресурсу в корневом каталоге расширения. Ведущие косые черты ( / ) автоматически обрезаются. Ключ "run_at" указывает, когда будет внедрен каждый файл.

"css" — Массив
Необязательный . Массив путей к файлам CSS, внедряемых в порядке этого массива и до того, как произойдет какое-либо построение DOM или рендеринг страницы.
"js" — Массив,
Необязательный . Массив путей к файлам JavaScript, внедренных в том порядке, в котором они появляются в этом массиве, после внедрения файлов CSS. Каждая строка в массиве должна представлять собой относительный путь к ресурсу в корневом каталоге расширения. Ведущие косые черты ('/') автоматически обрезаются.

Сопоставить URL-адреса

Требуется только свойство "matches" . Затем вы можете использовать "exclude_matches" , "include_globs" и "exclude_globs" , чтобы указать, в какие URL-адреса следует вставлять код. Клавиша "matches" вызовет предупреждение .

"matches" — Массив
Необходимый . Указывает, в какие шаблоны URL-адресов следует вставлять сценарии содержимого. Синтаксис см. в разделе «Шаблоны сопоставления» .
"exclude_matches" — Массив
Необязательный . Исключает шаблоны URL-адресов для внедрения сценариев содержимого. Синтаксис см. в разделе «Шаблоны сопоставления» .
"include_globs" — Массив
Необязательный . Применяется после совпадений, чтобы включать только те URL-адреса, которые также соответствуют этому шаблону. Предназначен для эмуляции ключевого слова @include Greasemonkey.
"exclude_globs" — Массив
Необязательный . Применяется после совпадений, чтобы исключить URL-адреса, соответствующие этому шаблону. Предназначен для эмуляции ключевого слова @exclude Greasemonkey.

Глобальные URL-адреса — это URL-адреса, которые содержат «подстановочные знаки» * и вопросительные знаки. Подстановочный знак * соответствует любой строке любой длины, включая пустую строку, а вопросительный знак ? соответствует любому отдельному символу.

Сценарий содержимого внедряется на страницу, если:

  • Его URL-адрес соответствует всем шаблонам "matches" и "include_globs" .
  • И URL-адрес не соответствует шаблонам "exclude_matches" или "exclude_globs" .

Примеры сопоставления глобусов и URL-адресов

"include_globs"

манифест.json

{
  ...
  "content_scripts": [
    {
      "matches": ["https://*.example.com/*"],
      "include_globs": ["https://???.example.com/foo/*"],
      "js": ["content-script.js"]
    }
  ],
  ...
}
Матчи
https://www.example.com/foo/bar
https://the.example.com/foo/
Не совпадает
https://my.example.com/foo/bar
https://example.com/foo/*
https://www.example.com/foo

манифест.json

{
  ...
  "content_scripts": [
    {
      "matches": ["https://*.example.com/*"],
      "include_globs": ["*example.com/???s/*"],
      "js": ["content-script.js"]
    }
  ],
  ...
}
Матчи
https://www.example.com/arts/index.html
https://www.example.com/jobs/index.html
Не совпадает
https://www.example.com/sports/index.html
https://www.example.com/music/index.html

"exclude_globs"

манифест.json

{
  ...
  "content_scripts": [
    {
      "matches": ["https://*.example.com/*"],
      "exclude_globs": ["*science*"],
      "js": ["content-script.js"]
    }
  ],
  ...
}
Матчи
https://history.example.com
https://.example.com/music
Не совпадает
https://science.example.com
https://www.example.com/science

Пример расширенной настройки

манифест.json

{
  ...
  "content_scripts": [
    {
      "matches": ["https://*.example.com/*"],
      "exclude_matches": ["*://*/*business*"],
      "include_globs": ["*example.com/???s/*"],
      "exclude_globs": ["*science*"],
      "js": ["content-script.js"]
    }
  ],
  ...
}
Матчи
https://www.example.com/arts/index.html
https://.example.com/jobs/index.html
Не совпадает
https://science.example.com
https://www.example.com/jobs/business
https://www.example.com/science

Рамки

Ключ "all_frames" указывает, следует ли вставлять сценарий содержимого во все кадры, соответствующие указанным требованиям URL. Если установлено значение false он будет вставляться только в самый верхний кадр. Его можно использовать вместе с "match_about_blank" для внедрения в кадр about:blank .

Чтобы внедрить в другие кадры, такие как data: , blob: и filesystem: , установите для параметра "match_origin_as_fallback" значение true . Подробности см. в разделе «Вставка в связанные кадры».

"all_frames" логическое значение
Необязательный . По умолчанию установлено значение false , что означает, что сопоставляется только верхний кадр. Если установлено значение true, он будет вставляться во все кадры, даже если этот кадр не является самым верхним кадром на вкладке. Каждый кадр проверяется независимо на соответствие требованиям URL-адреса. Он не будет внедряться в дочерние кадры, если требования URL-адреса не выполняются.
"match_about_blank" — логическое значение
Необязательный . По умолчанию установлено значение false . Должен ли сценарий вставляться в кадр about:blank , где родительский URL-адрес соответствует одному из шаблонов, объявленных в "matches" .
"match_origin_as_fallback" — логическое значение
Необязательный . По умолчанию установлено значение false . Должен ли сценарий внедряться в кадры, созданные соответствующим источником, но URL-адрес или источник которых могут не соответствовать шаблону напрямую. К ним относятся кадры с различными схемами, например about: , data: , blob: и filesystem: .

Время выполнения и среда выполнения

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

"run_at" - document_start | document_end | document_idle
Необязательный . Указывает, когда сценарий следует внедрить на страницу. Это соответствует состояниям загрузки Document.readyState :
  • "document_start" : DOM все еще загружается.
  • "document_end" : ресурсы страницы все еще загружаются.
  • "document_idle" : загрузка DOM и ресурсов завершена. Это значение по умолчанию.
"world" - ISOLATED | MAIN
Необязательный . Мир JavaScript, в котором выполняется скрипт. По умолчанию установлено значение "ISOLATED" , которое является средой выполнения, уникальной для сценария содержимого. Выбор мира "MAIN" означает, что сценарий будет использовать среду выполнения совместно с JavaScript главной страницы. Дополнительную информацию см. в разделе «Работа в изолированных мирах» .

Пример

См. руководство «Запуск на каждой странице» , чтобы создать расширение, которое вставляет сценарий содержимого в манифест.