Перейти до вмісту
31 липня 2026 · Довідник

Посібник: створення розширень для браузера

У цій статті описано продукт станом на дату публікації. Актуальні можливості дивіться в розділах AI Builder та Команди агентів.

Посібник: створення розширень для браузера

Priya — минулого тижня ви запитали, чи має ваш трекер зниження цін просто опитувати сторінку товару щохвилини «про всяк випадок». Перш ніж ви це закладете, дозвольте пояснити все по порядку, бо інтервал опитування — насправді найменше з рішень, і якщо одразу правильно окреслити структуру, це заощадить вам цикл-другий перевірки перед запуском.

Почнімо із самого запиту. Ви сказали «розширення, яке стежить за цією сторінкою і повідомляє мене, коли ціна падає» — непогана ідея, але це ще не специфікація: білдеру потрібно знати коли воно діє, а не лише що воно робить. Ваш трекер — третій із трьох варіантів тригера, і варто знати про інші два, навіть якщо вони вам не потрібні, бо саме форма тригера визначає дозволи, а дозволи визначають ваш термін проходження перевірки.

  • Дія за кліком — найдешевший варіант: спливне вікно, яке спрацьовує один раз на поточній сторінці, коли хтось натискає іконку на панелі інструментів — щось на кшталт «зібрати всі ціни на цій сторінці у список».
  • Постійно активний контент-скрипт запускається автоматично за вказаним вами URL-шаблоном — добре підходить, наприклад, для виділення назви конкурента на кожній сторінці певного домену, але шаблон потрібно вказати явно, бо «на наших внутрішніх сайтах» буде витлумачено вужче, ніж ви мали на увазі.
  • Ваш випадок — третій варіант: фоновий трекер, стан якого зберігається незалежно від того, чи відкрита вкладка, що працює через service worker у MV3 і позначає значком іконку при зміні.

Це саме той варіант, коли білдер має поставити вам уточнювальне запитання — і поставить, бо число інтервалу опитування є реальним компромісом, а не формальністю.

Це повертає мене до вашого інстинкту «щохвилини». Якось я отримав запит, майже ідентичний вашому, — стежити за сторінкою, позначати іконку при зміні ціни, — і перша версія опитувала кожні 60 секунд. Для одного тестувальника локально це працювало добре. Помножте це на кількість людей, які насправді встановлять це розширення, і ви без потреби бомбардуєте чужу сторінку товару, бо ціни на звичайному роздрібному лістингу змінюються не частіше кількох разів на день. Скажіть білдеру в запиті «перевіряти кожні 30 хвилин». Це не компроміс, а чесніший запит — нікому не потрібні сповіщення частіше за хвилину від розширення браузера, і ви ще подякуєте собі, коли не доведеться пояснювати перевіряючому, чому ваше розширення «дзвонить додому» 1440 разів на день.

Про що вам не варто турбуватися

Ви згадували, що нервуєте через маніфест — не варто, це якраз те, чого вам справді не потрібно торкатися. Обидва магазини тепер вимагають Manifest V3; MV2 більше не приймається для нових лістингів, і Chrome активно виводить з експлуатації ще діючі розширення на MV2. Головна зміна в MV3 полягає в тому, що ваша фонова логіка працює як service worker замість постійної фонової сторінки — він запускається за подією, браузер може «вбити» його між подіями, а стан має проходити через chrome.storage замість того, щоб просто зберігатися в змінній. Це якраз та деталь життєвого циклу, яку білдер за замовчуванням реалізує правильно. Файл маніфесту ви побачите, лише якщо самі захочете його знайти.

Насправді вам варто зосередити увагу на дозволах, бо саме вони визначають швидкість перевірки, а не код. Вашому трекеру потрібен alarms для опитування і, ймовірно, storage для запам'ятовування останньої ціни — йому не потрібен tabs або <all_urls>, і якщо ви попросите «можливість зрештою працювати на будь-якому сайті», бо плануєте розширити функціонал пізніше, білдер реалізує саме це, і ви запросите широкий доступ до хостів заради функції, якої ще не існує. Це найлякливіший пункт у діалозі встановлення — «читати та змінювати дані на кожному сайті, який ви відвідуєте», — і саме він переводить автоматичну перевірку в ручну. Опишіть, що розширення робить сьогодні. Розширите пізніше, коли справді знадобиться.

Ще дві речі варті тридцяти секунд уваги, перш ніж вважати справу завершеною: інтерфейс спливного вікна та іконки.

  • Інтерфейс спливного вікна — сторінка налаштувань за замовчуванням, голі чекбокси без ієрархії, є справжнім джерелом однозіркових відгуків, які не мають нічого спільного з тим, чи працює розширення. У вас лише кілька налаштувань (URL, можливо, інтервал), але вони все одно мають виглядати як частина продукту, а не як звалище форм.
  • Іконки — перевірте іконку в усіх чотирьох розмірах Chrome (16, 32, 48, 128 пікселів, для Firefox матриця трохи інша), бо логотип, чіткий на 128 пікселях, перетворюється на пляму на 16 пікселях — а це саме той розмір, у якому він більшість часу живе на переповненій панелі інструментів.

Перш ніж торкатися будь-якого магазину

Перевірте це насправді, а не лише в попередньому перегляді чату. Результатом збірки є справжнє розширення, яке можна завантажити, тож перейдіть до chrome://extensions, увімкніть режим розробника, «завантажити розпаковане» і запустіть його на реальній сторінці товару, яка вас цікавить, — а не на її симульованій версії. Я б окремо вручну перевірив дві речі: чи відповідає запит на дозвіл при встановленні тому, що ви очікуєте, виходячи з вашого запиту, і що станеться, якщо контент-скрипт колись потрапить на сторінку, для якої він не був створений, — чи він тихо дасть збій, чи видасть щось видиме? Обидві перевірки займають менше хвилини, і обидва баги очевидні одразу, як тільки ви подивитеся, і непомітні, якщо не подивитеся.

Коли будете готові до фактичного запуску, ви пройдете через власні облікові записи розробника в обох магазинах — лістинг належить вам, ця платформа не керує ним за вас. І хочу відзначити, що два магазини аж ніяк не симетричні, бо не хочу, щоб ви планували дату запуску, виходячи з припущення, що вони однакові.

МагазинПроцес подання
ChromeАвтоматично заповнює лістинг — назву, опис, категорію та текст обґрунтування дозволів, який справді читають на перевірці, згенерований на основі того, що робить код, а не написаний окремо, — це важливо, бо невідповідні обґрунтування самі по собі є поширеною причиною відхилення.
FirefoxПрактично без втручання; конвеєр Mozilla легший, і подання просто проходить.

Комплект для лістингу, який згенерується після завершення вашої збірки, також створить скріншоти, зроблені з реально працюючого розширення (а не макета), текст лістингу та відповіді щодо конфіденційності, звірені з реальним кодом, а не заповнені з пам'яті. Останнє важливіше, ніж здається, для того, що взаємодіє із зовнішньою сторінкою: анкета Chrome щодо конфіденційності містить прямі запитання «так/ні» про обробку даних, і відповідь «ні» на «чи збирає це дані», коли ваш трекер опитує та зберігає ціни, — саме та дрібна нечесність, через яку розширення знімають уже після запуску, а не просто відхиляють до нього. Перевірка відповідей за реальним кодом автоматично закриває цей розрив за вас.

Конкретно щодо вашої дати запуску:
МагазинТиповий час перевірки
FirefoxГодини, іноді менше однієї
ChromeКілька днів, іноді ближче до двох у невдалий тиждень

Розширення з фоновим збереженням стану, як ваше, з більшою ймовірністю потраплять у повільнішу чергу ручної перевірки, ніж просте розширення з дією за кліком. Жоден із нас не може вплинути на цю чергу. Плануйте анонс, орієнтуючись на терміни Chrome, а не Firefox, і не призначайте нічого на день подання.

Останнє, оскільки я вас знаю: ви вже думаєте про додавання «синхронізації списку відстеження між пристроями» та «відстеження історії цін у часі» після запуску. Це нормально, але майте на увазі: кожна з цих функцій — новий дозвіл, а новий дозвіл може означати повільнішу перевірку, ніж та, яку ви щойно пройшли. Якщо ви впевнені, що хочете більшу версію, справді краще запросити її одразу і пройти одну повільнішу перевірку, ніж додавати дозволи по одному. Якщо ще не впевнені — випускайте те, що є: чітко окреслений трекер швидко проходить перевірку, дає вам реальне використання, а реальне використання зараз цінніше за довший список функцій, що застряг у черзі Chrome. Додати більше можна завжди пізніше; повернути втрачений запуск, застрягши в ручній перевірці через непотрібну функцію, — ні.

Довідник
ПоділитисяXLinkedInFacebookRedditQuoraWhatsAppTelegramЕл. пошта
← Усі публікації