Я новичок в расширениях chrome, но не знал об использовании свойства match_about_blank в файле манифеста. Может ли кто-нибудь объяснить легкими словами?Может ли кто-нибудь объяснить, что используется «match_about_blank» в файле манифеста chrome extension?
ответ
Позвольте мне начать с ссылкой на documentation of "match_about_blank":
ли вставить скрипт контента на
about:blank
иabout:srcdoc
. Контентные скрипты будут вводиться только на страницах, если их URL-адрес наследования совпадает с одним из объявленных шаблонов в полеmatches
. URL-адрес наследования - это URL-адрес документа, который создал фрейм или окно. Скрипты содержимого не могут быть вставлены в изолированные кадры.
Чтобы полностью понять это, некоторые понятия необходимы:
same-origin policy является фундаментальной особенностью безопасности браузеров, навязывает, что веб-страницы можно только запускать скрипты в других фреймах или окнах, если документы служил от одного и того же происхождения.
Часто «начало» страницы можно определить, просмотрев URL-адрес. Есть некоторые исключения, когда это невозможно, в том числе «about: blank», «about: srcdoc» и изолированные фреймы.
"about: blank" - пустая страница. Когда вы создаете пустой фрейм (например,) или открываете новое окно (
window.open()
), URL-адрес «about: blank». Чтобы позволить открывающему сценарию запускать сценарии на этой странице, пустая страница имеет то же происхождение, что и страница/фрейм, открывший окно/фрейм.«О: srcdoc» является URL-кадра, содержание которого устанавливается через
srcdoc
attribute of an iframe и наследует происхождение родительского окна, похожие на «о: пустой» кадры.- Иногда кадр имеет начало координат, отличное от любого другого источника, и в результате ни одна другая страница не может запускать сценарии в этом фрейме. Существует два способа достижения этого условия: 1) когда пользователь переходит к «около: пустой» через панель местоположения. 2) Если на страницу влияет песочница без директивы «разрешить то же самое» (либо через
Content-Security-Policy
HTTP header, либо черезsandbox
attribute of an iframe).
Chrome расширений не могут запускать скрипты на других сайтах, , если они явно запросить разрешение на этот сайт, либо declaring host permissions in the
"permissions"
section of manifest.json, или путем перечисления на сайт в"matches"
section of a content script.
Скрипты содержимого запускаются на страницах (и фреймах), когда их URL-адрес сопоставляется клавишами «matches» в manifest.json. Раньше было невозможно напрямую запускать скрипты в пустых кадрах, потому что «about: blank» не может быть сопоставлен шаблоном соответствия. Пользователи (в том числе разработчики блокировщиков рекламы) запросили возможность запускать сценарии в пустых кадрах (см. issue 76429: Content scripts do not inject into frames with no src because their url is "about:blank").
Я предлагаю читать с comment 35 и далее, если вас интересует полная история за разработкой ключа match_about_blank. Короче говоря, шаблон соответствия "about:blank"
сам по себе совершенно бесполезен, так как он будет соответствовать множеству кадров из всех источников. Следовательно, возможность запуска скриптов была реализована путем введения ключа match_about_blank
(вместо поддержки шаблона соответствия «около: пустой»).
Так вы должны использовать только "match_about_blank":true
, если вы хотите запускать скрипты в пустых кадрах. Большинство расширений также должны устанавливать "all_frames": true
(иначе скрипт работает только в пустых кадрах верхнего уровня, а не в дочерних кадрах). Таким образом, чтобы запускать скрипты в example.com и все пустые кадры/окно, открытое из нее, используйте следующее manifest.json:
...
"content_scripts": [{
"js": ["contentscript.js"],
"matches": ["*://*.example.com/*"],
"all_frames": true,
"match_about_blank": true
}]
...
Вот несколько примеров, чтобы показать эффект выше деклараций содержания сценария.
This page is at https://example.com/index.html
<!-- Content script will run here -->
<!-- This frame is about:blank, at the same origin as https://example.com -->
<iframe></iframe> <!-- Content script runs in the frame too -->
<!-- This frame is about:srcdoc, at the same origin as https://example.com -->
<iframe srcdoc="test"></iframe> <!-- Content script runs in the frame too -->
<!-- This frame is about:blank, but with a unique origin -->
<iframe sandbox=""></iframe> <!-- No content script -->
<!-- This frame is about:blank, at the same origin as https://example.com -->
<iframe sandbox="allow-same-origin"></iframe>
<!-- Content script runs in the above frame too -->
Примечания: Если сам нож также является пустым кадр, то используется открыватель нож, пока либо не пустой нож не найден. Если такого открывателя нет, или если открывающий не соответствует шаблону «matches», то скрипт содержимого не запускается.
Аналогично, содержание сценарии, которые динамически вставленные с помощью chrome.tabs.executeScript
выполняются только в пустых кадрах, если matchAboutBlank
является true
и расширения имеет разрешения на выполнение сценариев в (ближайшем непустом) открывателе этого кадра или вкладку.
Спасибо, информативный !!! –