Коротка відповідь
Web-accessible resources відкривають пакетні файли визначеним origin чи extension IDs. Оголошуйте лише потрібне сторінці, як icon чи ресурс стилів. Контентному скрипту не потрібне таке оголошення для запуску. Не використовуйте resources: ["*"] замість короткого списку.
Відкриття не є авторизацією чи зберіганням секретів. Дозволений сайт читає файл, а HTML створює нову межу вводу. Перевірте config, debug і дані до wildcard. Приватне не має бути в пакеті незалежно від налаштування.
Практичні кроки реалізації
Перелічіть ресурси сторінки
Простежте URL images, styles, fonts та iframes. Сторінки розширення зі своїми ресурсами відрізняються від web-сторінок. Інспектор Font Picker є сценарієм, не доказом конкретного оголошення. Перевірте маніфест.
Обмежте файли й caller
Обирайте точні шляхи й origin. Wildcard рекурсивно відкриє майбутні файли. Chrome використовує origin і потребує /*; це не обмеження одним шляхом сторінки. Для відомого іншого розширення використовуйте extension_ids.
Точно оцініть dynamic URL
use_dynamic_url дає ID сесії після restart чи reload. Генеруйте через runtime.getURL без старого кешу. Це зменшує сталі probes, не робить відкритий файл приватним. Перевірте версію й lifecycle.
Окремо перевірте активні поверхні
HTML потребує перевірки query, fragment і messages. Перехід до extension URL не доводить довіреного caller. Привілеї окремі, sender валідний, HTML без недовіреного вводу. Якщо вистачає image, активна сторінка зайва.
Приклад реалізації
Фрагмент відкриває один asset умовному HTTPS-origin. Додайте до маніфесту й генеруйте URL зі скрипта. Це доступ ресурсу, не host-доступ операцій.
{
"web_accessible_resources": [{
"resources": ["assets/inspector-icon.svg"],
"matches": ["https://app.example.com/*"],
"use_dynamic_url": true
}]
}
const icon = document.createElement("img");
icon.src = chrome.runtime.getURL("assets/inspector-icon.svg");
icon.alt = "";
document.documentElement.append(icon);
Змістовний icon потребує alt; порожній тут для сусіднього пояснення. Перевірте потрібний і сторонній origin та reload. ZIP має не відкривати зайве wildcard.
Компроміси та альтернативи
Точні assets потребують оновлення, але зміни явні. Directory-pattern зменшує підтримку ціною майбутнього відкриття. Окремі caller-правила простіші. Зручність обирайте після перевірки всіх файлів.
Поширені помилки
- Весь build відкритий.
- Зайве оголошення скриптів.
- Page-path як обмеження matches.
- Dynamic URL як шифрування.
- Debug-дані через wildcard.
Контрольний список перед випуском
- Файли мають consumer.
- Origin чи IDs обмежені.
- Wildcards звірено з ZIP.
- Reload перевірено.
- HTML валідує ввід.
- Секретів у пакеті немає.
Поширені запитання
Чи runtime.getURL відкриває ресурс?
Ні. Він будує URL. Правила маніфесту визначають доступ web-origin.
Чи matches обмежує шлях?
Не тут. Chrome зіставляє origin із /*. Шлях функції перевіряйте в коді.
Висновок
Відкривайте passive вузько, active як нову межу вводу. Перевіряйте пакет кожного випуску: старий wildcard відкриє новий файл.
Первинні джерела
Пов’язані посібники та приклади
Потрібно реалізувати це у вашому продукті?
Інструменти браузера з чіткою метою, обґрунтованими дозволами та підтримуваною архітектурою Manifest V3.