1.0.1 ("trusted-domains OAuth popups") changed setWindowOpenHandler to
return action:'allow' with overrideBrowserWindowOptions for trusted
domains (Google, Yandex, etc.), opening a real Electron BrowserWindow
as popup. The reasoning was that OAuth flows need window.opener +
postMessage. That's correct for some flows but wrong for YouTube-style
login, which uses straight redirect.
Worse: Google specifically detects popup-style embedded browsers
(Electron BrowserWindow has distinct fingerprint vs real Chrome popup)
and blocks them with "Возможно, этот браузер небезопасны". The user
reported this stopped working after 1.0.0 — that's why.
Restore the 1.0.0 behavior for trusted domains: deny the popup and call
view.webContents.loadURL(newUrl) in the same view. The OAuth flow now
happens as a normal in-place navigation: YouTube → accounts.google.com
→ (user logs in) → redirect back to YouTube. No popup, no fingerprint
mismatch. The only UX loss is the popup window aesthetic; behavior is
functionally identical and matches what worked in 1.0.0.
Untrusted cross-domain still asks for confirmation, same-origin popups
still navigate in-place — unchanged.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
ESH-Media
Десктопное приложение на Electron + React. Запускает веб-сервисы в отдельных WebContentsView, поиск и обзор фильмов через TMDB, встроенная блокировка рекламы.
Стек
- Electron 32
- React 18 + TypeScript
- Vite
- @cliqz/adblocker-electron
Запуск
npm install
npm run dev
Сборка
# Windows (installer + zip)
npm run build:win
# Linux (AppImage + deb)
npm run build:linux
Артефакты в папке release/.
Linux-сборку нужно запускать на Linux-машине.
Настройка
Настройки открываются кнопкой в левом верхнем углу приложения.
Приложения
Список сайтов, которые отображаются на главном экране в виде карточек. Для каждого можно указать:
- Название — отображается под иконкой
- URL — адрес сайта, открывается в отдельном WebContentsView
- URL иконки — картинка для карточки (необязательно)
- Прокси — использовать ли прокси для этого сайта (переключатель включается отдельно для каждого)
Прокси
Приложение поддерживает HTTP/HTTPS/SOCKS5 прокси. Настраивается в разделе "Прокси" — указываешь хост и порт. Прокси применяется не глобально, а поприложенно: для каждого сайта в списке есть отдельный переключатель. Это позволяет, например, открывать заблокированные сайты через прокси, а остальные — напрямую.
Конфигурация прокси сохраняется в файл ~/.ESH-Media.json и применяется при следующем запуске автоматически.
Поиск фильмов
- TMDB API Key — ключ для поиска метаданных, постеров и обзора по фильтрам. Получить бесплатно на themoviedb.org. Поддерживаются как обычные API-ключи, так и Bearer-токены.
- Сайты — список фильмовых сайтов, на которых будет производиться поиск после выбора фильма из TMDB. Поддерживаются движки DLE (kinogo, lordfilm и зеркала), HDRezka, Filmix. Тип определяется автоматически по домену.
Если раздел "Сайты" пустой, приложение попробует использовать подходящие сайты из раздела "Приложения".
Конфиг
Хранится в домашней директории пользователя: ~/.ESH-Media.json.
{
"apps": [...],
"proxy": { "host": "127.0.0.1", "port": "7890" },
"movieSites": [...],
"tmdbApiKey": "...",
"bookmarks": [...]
}
Структура
main.js — main process
preload.js — preload / IPC bridge
index.html — точка входа основного UI
loader.html — экран загрузки
dialog-error.html — диалог ошибки
dialog-confirm.html — диалог подтверждения
src/
entries/ — entry points для Vite (loader, dialogs)
components/ — React компоненты
pages/ — страницы
styles/ — стили