Разрешите пользователям настраивать поведение расширения, предоставив страницу параметров. Пользователь может просмотреть параметры расширения, щелкнув правой кнопкой мыши значок расширения на панели инструментов и выбрав параметры, или перейдя на страницу управления расширениями по адресу chrome://extensions
, найдя нужное расширение, нажав «Подробнее» и выбрав ссылку «Параметры».
Напишите страницу параметров
Ниже приведен пример страницы параметров.
<!DOCTYPE html>
<html>
<head><title>My Test Extension Options</title></head>
<body>
Favorite color:
<select id="color">
<option value="red">red</option>
<option value="green">green</option>
<option value="blue">blue</option>
<option value="yellow">yellow</option>
</select>
<label>
<input type="checkbox" id="like">
I like colors.
</label>
<div id="status"></div>
<button id="save">Save</button>
<script src="options.js"></script>
</body>
</html>
Сохраняйте предпочтительные параметры пользователя на разных устройствах с помощью API Storage.sync .
// Saves options to chrome.storage
function save_options() {
var color = document.getElementById('color').value;
var likesColor = document.getElementById('like').checked;
chrome.storage.sync.set({
favoriteColor: color,
likesColor: likesColor
}, function() {
// Update status to let user know options were saved.
var status = document.getElementById('status');
status.textContent = 'Options saved.';
setTimeout(function() {
status.textContent = '';
}, 750);
});
}
// Restores select box and checkbox state using the preferences
// stored in chrome.storage.
function restore_options() {
// Use default value color = 'red' and likesColor = true.
chrome.storage.sync.get({
favoriteColor: 'red',
likesColor: true
}, function(items) {
document.getElementById('color').value = items.favoriteColor;
document.getElementById('like').checked = items.likesColor;
});
}
document.addEventListener('DOMContentLoaded', restore_options);
document.getElementById('save').addEventListener('click',
save_options);
Объявить поведение страницы параметров
Существует два доступных типа страниц параметров расширения: полностраничные и встроенные . Тип параметров определяется тем, как они объявлены в манифесте.
Полные параметры страницы
Страница параметров расширения отобразится на новой вкладке. HTML-файл параметров указан в поле options_page
.
{
"name": "My extension",
...
"options_page": "options.html",
...
}
Встроенные опции
Встроенные параметры позволяют пользователям настраивать параметры расширения, не переходя со страницы управления расширениями внутри встроенного окна. Чтобы объявить встроенные параметры, зарегистрируйте HTML-файл в поле options_ui
манифеста расширения, установив для ключа open_in_tab
значение false.
{
"name": "My extension",
...
"options_ui": {
"page": "options.html",
"open_in_tab": false
},
...
}
page
(строка)Путь к странице параметров относительно корня расширения.
open_in_tab
(логическое значение)Укажите значение
false
, чтобы объявить встроенную страницу параметров. Еслиtrue
, страница параметров расширения будет открыта на новой вкладке, а не встроена в chrome://extensions .
Рассмотрим различия
Страницы параметров, встроенные в расширения chrome://, имеют некоторые тонкие различия в поведении, связанные с тем, что они не размещаются на собственных вкладках.
Ссылка на страницу параметров
Расширение может напрямую ссылаться на страницу параметров, вызывая chrome.runtime.openOptionsPage()
.
<button id="go-to-options">Go to options</button>
document.querySelector('#go-to-options').addEventListener('click', function() {
if (chrome.runtime.openOptionsPage) {
chrome.runtime.openOptionsPage();
} else {
window.open(chrome.runtime.getURL('options.html'));
}
});
API вкладок
Код страницы встроенных параметров расширения не размещается внутри вкладки, что влияет на использование API вкладок :
- tabs.query никогда не найдет вкладку в URL-адресе страницы параметров расширения.
- tabs.onCreated не сработает при открытии страницы параметров.
- tabs.onUpdated не сработает при изменении состояния загрузки страницы параметров.
- tabs.connect или tabs.sendMessage нельзя использовать для связи со страницей параметров.
Использование runtime.connect и runtime.sendMessage позволяет обойти эти ограничения, если странице параметров необходимо манипулировать содержащейся вкладкой.
API обмена сообщениями
Если страница параметров расширения отправляет сообщение с помощью runtime.connect или runtime.sendMessage , вкладка «Отправитель» не будет установлена, а URL-адрес отправителя будет URL-адресом страницы параметров.
Размеры
Встроенные параметры должны автоматически определять свой размер в зависимости от содержимого страницы. Однако встроенный блок может не подходить по размеру для некоторых типов контента. Эта проблема наиболее распространена на страницах параметров, форма содержимого которых регулируется в зависимости от размера окна.
Если это проблема, укажите фиксированные минимальные размеры страницы параметров, чтобы встроенная страница нашла подходящий размер.