Разработка расширения для Chrome (Android)
Chrome для Android поддерживает расширения начиная с Chrome 128 (август 2024) — только на планшетах и ChromeOS. На смартфонах поддержки пока нет. Это первое, что нужно понять перед тем, как браться за задачу: целевая аудитория и устройства ограничены.
Что реально доступно и что нет
Расширения для Chrome Android — это те же WebExtension (Manifest V3), что и для desktop Chrome. Большинство API работает, но с ограничениями платформы.
Работает: content_scripts, browser_action (toolbar popup), storage.local, tabs (активная вкладка), runtime.sendMessage, declarativeNetRequest для блокировки контента.
Не работает или работает иначе: background.js — только Service Worker. Постоянный фоновый скрипт, как в MV2, недоступен. windows API — одно окно. contextMenus — контекстное меню на touch отличается от desktop.
Манифест V3 — обязательно
{
"manifest_version": 3,
"name": "My Extension",
"version": "1.0",
"permissions": ["storage", "activeTab"],
"background": {
"service_worker": "background.js"
},
"action": {
"default_popup": "popup.html",
"default_icon": "icon.png"
},
"content_scripts": [{
"matches": ["https://*/*"],
"js": ["content.js"]
}]
}
MV2 расширения уже отключены в desktop Chrome и не поддерживаются в Chrome Android вообще.
Service Worker вместо background page
Главное архитектурное отличие от desktop MV2: Service Worker не живёт постоянно. Chrome может выгрузить его в любой момент. Состояние нельзя хранить в переменных — только в chrome.storage.
Типичный баг: разработчик хранит объект с данными в глобальной переменной Service Worker. При первом открытии расширения всё работает. При втором (Service Worker перезапустился) — данные потеряны, undefined.
// Неправильно
let userData = {};
// Правильно
chrome.storage.local.get(['userData'], (result) => {
const userData = result.userData || {};
// работаем с userData
});
Touch-специфика в popup и content scripts
Popup расширения открывается при нажатии на иконку в toolbar. На Android планшете иконка в адресной строке справа. Popup — это обычный HTML, но с ограниченной шириной: около 300-400px. На desktop это норма, на touch нужно увеличить размеры интерактивных элементов до минимум 44px по высоте.
Content scripts на touch-страницах: события mouseover, mouseenter не срабатывают. Если desktop-версия расширения использует hover для показа tooltip или preview — на Android это нужно переделывать под touchstart/click.
Распространение
Расширения для Chrome Android публикуются в Chrome Web Store — никакого отдельного магазина нет. Требования те же, что и для desktop. Но при проверке Google отдельно тестирует поведение на Android-устройствах, если в описании заявлена поддержка Android.
На момент написания Chrome Android Extensions доступны в экспериментальном режиме через chrome://flags/#extension-mime-request-handling для разработки. В production — через Chrome Web Store.
Срок разработки зависит от объёма: простое расширение с popup и content script — 3-5 дней, сложная логика с Service Worker, storage и nativeMessaging — 2-3 недели. Стоимость рассчитывается индивидуально.







