Оновлення та підтримка браузерного розширення
Життєвий цикл браузерного розширення не закінчується публікацією. Браузери оновлюють рушії, Manifest API змінюється, вебсайти-цілі змінюють структуру DOM — все це ламає розширення без супроводу. Планові оновлення, моніторинг помилок та оперативна реакція на відгуки в магазинах.
Система випуску оновлень
Розширення для Chrome оновлюються через Chrome Web Store автоматично. Користувачі отримують оновлення протягом кількох годин після публікації.
Staged rollout у Chrome Web Store дозволяє вивести оновлення на 1%, 10%, 50% користувачів — безпечний спосіб перевірити стабільність перед повним релізом.
// manifest.json: визначаємо URL для перевірки оновлень в enterprise-середовищі
{
"update_url": "https://clients2.google.com/service/update2/crx"
}
Моніторинг помилок з розширення
// background.js: централізований обробник помилок
self.addEventListener('unhandledrejection', (event) => {
reportError({
type: 'unhandled_rejection',
message: event.reason?.message,
stack: event.reason?.stack,
url: 'background',
});
});
function reportError(error) {
// Відправляємо в Sentry або власний endpoint
fetch('https://api.example.com/v1/extension/errors', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
...error,
extension_version: chrome.runtime.getManifest().version,
browser: navigator.userAgent,
timestamp: new Date().toISOString(),
}),
}).catch(() => {}); // мовчки ігноруємо помилки репортингу
}
Міграція Manifest V2 → V3
Перехід на Manifest V3 — обов'язковий з 2024 року для Chrome. Основні зміни:
| MV2 | MV3 | Рішення |
|---|---|---|
background.page |
service_worker |
Немає доступу до DOM, тільки події |
XMLHttpRequest в background |
fetch() |
Переписуємо запити |
chrome.extension.getURL |
chrome.runtime.getURL |
Замінюємо виклики |
| Inline-скрипти в popup | Окремі .js файли | Витягуємо скрипти |
webRequestBlocking |
Declarative Net Request | Переробляємо блокування |
Тестування перед оновленням
# Автоматизоване тестування розширення через Playwright
const { chromium } = require('playwright');
const browser = await chromium.launchPersistentContext('.profile', {
headless: false,
args: [`--load-extension=${path.resolve('dist')}`],
});
const extensionId = await getExtensionId(browser);
const popup = await browser.newPage();
await popup.goto(`chrome-extension://${extensionId}/popup.html`);
// Тест авторизації
await popup.click('#login-button');
await popup.waitForSelector('#user-name', { timeout: 5000 });
Підтримка Firefox та Edge
Chrome-розширення працюють у Edge без змін. Firefox вимагає невеликих адаптацій:
-
browser.*замістьchrome.*(або polyfillwebextension-polyfill) - Окрема публікація в Firefox Add-ons (AMO)
- Підписання через
web-ext sign
npm install -g web-ext
web-ext sign --api-key=... --api-secret=...
Терміни підтримки
Планове оновлення (виправлення + 1–2 нові функції): 3–5 робочих днів. Терміновий хотфікс при поломці: 1–2 робочих дня.







