Опубликовано: 19 ноября 2024 г.
На Google I/O 2024 мы поделились некоторыми ранними проектами предстоящих изменений в меню расширений, которые дают пользователям больше контроля над сайтами, к которым могут получить доступ расширения. В ближайшее время мы собираемся начать тестирование этих изменений, начав с небольшого процента пользователей на Канарских островах и надеясь распространить их более широко в будущем.
Говоря с разработчиками об этом изменении в прошлом, мы часто слышали опасения по поводу последствий изменения способа, которым расширения могут запрашивать разрешения хоста во время установки. Новое меню не влияет на поведение по умолчанию. Расширениям по-прежнему будет предоставляться доступ ко всем запрошенным хостам во время установки. Цель этих изменений — облегчить пользователям поиск уже доступных элементов управления.
В этом посте представлен обзор того, чего ожидать и как вы можете подготовить свои расширения с помощью нового API для обработки случаев, когда доступ к странице был закрыт пользователем.
Что меняется?
Чтобы предоставить пользователям больше контроля, мы представим новое меню расширений. Расширениям по-прежнему будет предоставляться доступ ко всем запрошенным хостам во время установки, но у пользователей теперь будет более простой способ контролировать доступ для каждого расширения.
Новое меню (на фото с текущим дизайном, который может измениться) более четко показывает, какие расширения могут работать на странице, и дает пользователям возможность изменить доступ, если он выбран. Пользователь также может запретить запуск всех расширений на определенном сайте. Как уже упоминалось, ни одна из доступных настроек или значений по умолчанию не меняется — мы сосредоточены на том, чтобы пользователям было легче найти то, что у нас уже есть.
Добавить запрос на доступ к сайту
Мы разработали новый API, дополняющий эти изменения, при активном участии других браузеров и разработчиков в группе сообщества WebExtensions .
Если пользователь запретил доступ к странице, расширения теперь могут запросить доступ с помощью нового API permissions.addSiteAccessRequest
. Когда расширение сделает это, пользователь увидит сообщение «Разрешить» рядом с элементом головоломки расширения на панели инструментов. Вот один дизайн, который мы изучаем:
Когда пользователь нажимает «Разрешить» в меню расширений, расширению предоставляется постоянный доступ к хосту. Пользователь может снова отказаться от него в будущем, открыв меню расширений или на странице chrome://extensions. Нажав «Разрешить 1?» на панели инструментов обеспечивает более быстрый способ предоставления немедленного доступа.
Расширения могут вызывать permissions.addSiteAccessRequest
с tabId
, чтобы показать запрос разрешения для этой вкладки. Вы можете использовать обнаружение функции, чтобы безопасно начать использовать ее в своем расширении уже сегодня. API ничего не даст пользователям без нового меню, но его внедрение принесет пользу пользователям с новым меню по мере его постепенного развертывания.
chrome.tabs.onUpdated.addListener(async (tabId, changes) => {
if (typeof changes.url !== 'string') return;
const url = new URL(changes.url);
// If we are on the /checkout page of example.com.
if (url.origin === 'https://example.com' && url.pathname === '/checkout') {
const hasPermission = await chrome.permissions.contains({
origins: ['https://example.com/*']
});
// We already have host permissions.
if (hasPermission) {
return;
}
// Add a site access request if the API is available.
if (chrome.permissions.addSiteAccessRequest) {
chrome.permissions.addSiteAccessRequest({ tabId });
}
}
});
В этом примере мы добавляем запрос только в том случае, если пользователь находится на странице /checkout
. Вы можете увидеть полный код в нашем репозитории chrome-extensions-samples.
Расширениям следует учитывать, когда запрашивать у пользователей доступ. Пользователи с большей вероятностью игнорируют шумные запросы, а Chrome может ограничивать чрезмерные запросы. Пользователь также может отключить возможность расширения показывать запросы. В результате вам следует запрашивать доступ только в определенных ситуациях, когда вы полностью уверены, что пользователь захочет взаимодействовать с вашим расширением.
Запросы привязаны к определенной вкладке и автоматически очищаются, когда пользователь переходит к другому источнику. Соответствующий метод removeSiteAccessRequest
доступен для явной очистки запроса (например, если запрос привязан к определенному пути).
Поскольку этот API связан с новым меню расширений, вызовы будут игнорироваться, если новое меню не включено. Однако мы рекомендуем вам попробовать API сегодня и рассмотреть возможность использования его в своем расширении. Вы обеспечите отличный пользовательский опыт, поскольку новые изменения в меню постепенно станут доступны большему количеству пользователей.
Чтобы узнать больше о работе с дополнительными разрешениями, ознакомьтесь с документацией по разрешениям.
Попробуйте это
API включен по умолчанию в Chrome 133.0.6838.0 и выше (в настоящее время в Chrome Canary). Чтобы включить новое меню, на странице chrome://flags включите флаг «Контроль доступа к меню расширений».
Напоминаем, что эта работа все еще находится в стадии разработки и может продолжать развиваться и меняться. Мы рекомендуем протестировать Chrome Canary, чтобы увидеть самые актуальные возможности.
Вы можете оставить отзыв о новом дизайне в списке рассылки chromium-extensions , который мы будем иметь в виду, продолжая работу над новым меню.