extensions-permissions
Разрешения расширений: Зачем они нужны и как их запрашивать
Разрешения (permissions) – это механизм безопасности Chrome, который контролирует, к каким ресурсам и API браузера может получить доступ ваше расширение. Это важно для защиты приватности пользователей и предотвращения злоупотреблений.
Зачем нужны разрешения?
- Безопасность: Разрешения ограничивают возможности расширения, предотвращая несанкционированный доступ к данным пользователя, истории браузера, веб-камере и другим чувствительным ресурсам.
- Приватность: Пользователи должны быть уверены, что расширения не собирают и не передают их личные данные без их ведома и согласия. Разрешения помогают контролировать доступ к таким данным.
- Прозрачность: Когда вы запрашиваете разрешения в
manifest.json
, Chrome показывает пользователю список запрашиваемых разрешений при установке расширения. Это делает процесс установки более прозрачным и позволяет пользователю принять информированное решение.
Как запрашивать разрешения?
Разрешения запрашиваются в файле manifest.json
в поле "permissions"
. Это массив строк, где каждая строка – это название разрешения.
Примеры распространенных разрешений:
-
"activeTab"
:- Описание: Позволяет расширению временно получить доступ к активной вкладке браузера, когда пользователь взаимодействует с расширением (например, нажимает на иконку).
- Использование: Для расширений, которые нужно взаимодействовать с текущей веб-страницей, но только по запросу пользователя.
- Пример: Расширение для изменения цвета фона страницы, расширение для выделения текста на странице.
-
"storage"
:- Описание: Позволяет расширению использовать API
chrome.storage
для хранения данных (локальное хранилище, синхронизированное хранилище). - Использование: Для сохранения настроек расширения, пользовательских данных, заметок и другой информации, которую нужно сохранить между сессиями браузера.
- Пример: Расширение-блокнот, расширение для сохранения списка заблокированных сайтов.
- Описание: Позволяет расширению использовать API
-
"alarms"
:- Описание: Позволяет расширению использовать API
chrome.alarms
для создания таймеров и задач, выполняемых в фоновом режиме. - Использование: Для расширений, которым нужно выполнять периодические задачи, отправлять уведомления по расписанию.
- Пример: Расширение-напоминание, расширение для проверки обновлений.
- Описание: Позволяет расширению использовать API
-
"<all_urls>"
:- Описание: Предоставляет доступ ко всем веб-сайтам. Используйте с крайней осторожностью!
- Использование: Только если расширению действительно необходимо взаимодействовать со всеми веб-сайтами. Запрашивая это разрешение, вы должны четко объяснить пользователю, зачем оно нужно, в описании расширения в Chrome Web Store.
- Пример: Блокировщики рекламы (должны блокировать рекламу на всех сайтах), расширения для изменения внешнего вида всех сайтов.
-
"contextMenus"
:- Описание: Позволяет расширению использовать API
chrome.contextMenus
для добавления пунктов в контекстное меню. - Использование: Для расширений, которые добавляют действия в контекстное меню.
- Пример: (уже рассмотрено в теме 2)
- Описание: Позволяет расширению использовать API
-
"commands"
:- Описание: Позволяет расширению использовать API
chrome.commands
для назначения горячих клавиш. - Использование: Для расширений, которые используют горячие клавиши.
- Пример: (уже рассмотрено в теме 2)
- Описание: Позволяет расширению использовать API
Пример запроса разрешений в manifest.json
:
{
"manifest_version": 3,
"name": "Расширение с разрешениями",
"version": "1.0",
"description": "Пример расширения, запрашивающего разрешения.",
"action": {
"default_popup": "popup.html"
},
"permissions": [
"activeTab",
"storage",
"alarms",
"contextMenus"
]
}
Важно: Запрашивайте только те разрешения, которые действительно необходимы вашему расширению. Избыточный запрос разрешений может отпугнуть пользователей и привести к отклонению расширения при публикации в Chrome Web Store.
Практическое задание:
- Добавьте разрешение
"storage"
вmanifest.json
для расширения "Привет, мир!". - В
popup.js
сохраните текст "Привет, мир!" в локальное хранилище (chrome.storage.local.set
). - При открытии всплывающего окна, загрузите текст из хранилища и отобразите его.
- Подсказка: Используйте
chrome.storage.local.get
для получения данных из хранилища.
- Подсказка: Используйте
- Удалите разрешение
"storage"
изmanifest.json
и попробуйте запустить расширение. Посмотрите, что произойдет.