Skip to content

Поддержка Firefox для Android, проверка всех API перед использованием - #7

Merged
goodprogrammist merged 1 commit into
masterfrom
claude/festive-bardeen-b8f0m7
Oct 11, 2026
Merged

goodprogrammist merged 1 commit into
masterfrom
claude/festive-bardeen-b8f0m7

Conversation

@goodprogrammist

Copy link
Copy Markdown
Owner

Найденная ошибка

По @mdn/browser-compat-data в Firefox для Android нет API windows и commands (firefox_android: false). background.js вызывал api.windows.onFocusChanged.addListener и api.commands.onCommand.addListener без проверки. На Android это TypeError, и следующие подписки не регистрировались: синхронизация иконки с cookie, изменения настроек, открытие настроек после установки.

Что сделано

  • В common.js добавлены помощники: getApi/hasApi, callApi (запасное значение, если API нет), requireApi (понятная ошибка для обязательных API — операций с cookie, запроса доступа, сохранения настроек), addApiListener. Все обращения к api.* во всех файлах идут через них.
  • Если нет storage.sync, настройки хранятся в storage.local.
  • По MDN, на Android popup может открываться обычной страницей во вкладке. Тогда сайтом считается последняя использованная другая вкладка (tabs.getCurrent + lastAccessed).
  • README и описания для магазинов: поддерживается Firefox для Android, без горячих клавиш.

Тесты

  • tests/android-env.test.js (без браузера, npm run test:unit): окружение как у Firefox для Android, урезанные API, помощники. На старом коде 0/4, на новом 4/4.
  • Popup, открытый вкладкой, проверен в Chromium и Firefox.
  • Стабилизированы тесты:
    • инкогнито Chrome — отключён HTTPS-First, который задерживал загрузку с тестового http-сервера;
    • приватное окно Firefox — повтор первого вызова после перезагрузки дополнения.
  • Локально: Chromium 141 — 18/18 (3 прогона), Firefox 157.0.1 — 15/15 (8 прогонов), Firefox 153.4.0esr — 15/15, web-ext lint — 0 ошибок.

Настоящий Firefox для Android здесь запустить нельзя: нет /dev/kvm для эмулятора, Android SDK недоступен.

🤖 Generated with Claude Code

https://claude.ai/code/session_011ZZMU6eeKUpne5HfQBAxoT


Generated by Claude Code

- common.js: getApi/hasApi, callApi (fallback when missing), requireApi
  (clear error for required APIs), addApiListener; all api.* calls use them
- Firefox for Android has no windows and commands APIs (@mdn/browser-compat-data);
  background.js crashed on them before the remaining listeners were registered
- popup shown as a page in its own tab (Firefox for Android): the site is the
  last used other tab (tabs.getCurrent + lastAccessed)
- settings fall back to storage.local when storage.sync is missing
- tests/android-env.test.js (no browser): Android-like and reduced API
  environments, helpers; fails on the previous code, passes now
- tests: popup opened as a tab in Chromium and Firefox; Chrome incognito test
  disables HTTPS-First (http-only test server), Firefox private test retries
  the first call after the addon reload
- README and store listings: Firefox for Android (without keyboard shortcuts)

Passed locally: unit 4/4, Chromium 141 18/18 (3 runs), Firefox 157.0.1 15/15
(8 runs), Firefox 153.4.0esr 15/15 (2 runs), web-ext lint 0 errors.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011ZZMU6eeKUpne5HfQBAxoT
@goodprogrammist
goodprogrammist merged commit bf8bfde into master Oct 11, 2026
0 of 6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants