cliqz/adblocker-electron registers its preload at session level via
session.setPreloads([...preloads, PRELOAD_PATH]) inside
enableBlockingInSession. That preload injects inline <script> elements
via doc.createElement('script') + script.appendChild(textNode) +
parent.appendChild(script). On modern strict-CSP sites this breaks:
- Trusted Types (YouTube, Gmail): "An HTMLScriptElement was directly
modified and will not be executed" — 52+ console errors.
- Nonce-required CSP (kinogo via Cloudflare): "Refused to execute inline
script ... script-src 'nonce-...'" — competing with Cloudflare's
challenge JS, likely the proximate cause of the 403 we see on kinogo
(CF treats the broken page as bot).
Remove the cliqz preload from each session immediately after
enableBlockingInSession. The network/CSP/blockers attached via
webRequest hooks remain active — only the script-injection layer for
anti-anti-adblock scriptlets is lost, which is a niche feature that
breaks more sites than it fixes.
The 1.0.7 Blink TrustedDOMTypes disable stays (defense in depth, no
cost). The 1.0.6 CSP-header strip stays removed (adblocker overwrites
the webRequest listener anyway).
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/ — стили