FoxBrowser — Windows-first браузерний shell на C# / .NET 8 WPF / WebView2, оптимізований під фонову роботу з мінімальною кількістю живих renderer-ів.
Правила прихованих елементів зберігаються у blocked-elements.json поруч із FoxBrowser.exe, щоб portable-версія не створювала для них окремі файли в профілі користувача.
Готовий portable-білд лежить у Releases:
- Завантажте
.zipз останнього релізу. - Розпакуйте в будь-яку теку.
- Запустіть
FoxBrowser.exe.
Інсталятор не потрібен. Налаштування (наприклад, blocked-elements.json) зберігаються поруч з .exe, тож теку можна переносити разом із ними.
Вимоги: Windows 10 версії 1809 або новіше та Microsoft Edge WebView2 Runtime (Evergreen). У Windows 11 він уже встановлений, у Windows 10 зазвичай теж.
FoxBrowser використовує один WebView2 на весь застосунок. Логічні вкладки є лише metadata-об'єктами: URL, назва, scroll position, позиція медіа і прапор Audio Mode.
20 логічних вкладок = 1 живий WebView2 + 19 записів стану
При перемиканні вкладки поточний документ зберігає базовий стан, а єдиний WebView2 переходить на URL нової вкладки. Це свідомий компроміс: вкладка відновлюється через навігацію, зате не тримає окремий renderer у пам'яті.
- один спільний
WebView2замість WebView2 на кожну вкладку; - ресурсний firewall через
WebResourceRequested; - блокування відомих рекламних і аналітичних доменів;
- Audio/Minimized режим блокує images і fonts;
- у Audio/Minimized режимі блокуються сторонні iframe;
- прибираються
preload,prefetchіnextпосилання; - невидимі зображення, canvas та відеовізуалізація прибираються CSS-ін'єкцією;
- при звичайному згортанні вікно залишається на панелі завдань, нові навігації блокуються, а візуальний шар стискається; приховування у трей залишається окремою дією;
- watchdog кожні 30 секунд перевіряє Working Set процесу;
- якщо процес перевищує 850 МБ, виконується soft-reload активної сторінки зі збереженням URL, scroll position і позиції медіа;
- стан активного відео/аудіо відновлюється після reload настільки, наскільки це дозволяє сам сайт.
Кнопка ♫ Audio вмикає режим, який додатково ховає непотрібний YouTube UI: рекомендації, коментарі, chat, Shorts, зайві полиці та engagement-панелі. Video element залишається для відтворення аудіо, але його візуальний шар стискається до невидимого розміру.
Це зменшує трафік, GPU і кількість зайвих DOM-вузлів, але не може видалити базовий JavaScript runtime YouTube або audio/video decoder. Для цього потрібен окремий аудіоплеєр.
Потрібні Windows 10 версії 1809 або новіше, .NET 8 SDK та Microsoft Edge WebView2 Runtime Evergreen.
git clone https://github.com/FoxAlastor/FoxBrowser.git
cd FoxBrowser
dotnet restore
dotnet build -c Debug
dotnet run --project .\FoxBrowser.csprojАбо відкрийте FoxBrowser.sln у Visual Studio.
Порівнювати потрібно однаковий сценарій: однакові URL, однакова тривалість роботи, однаковий WebView2 Runtime. Зафіксуйте Working Set процесу FoxBrowser через 1, 5 і 20 хвилин у трьох режимах: звичайний, Audio Mode, Audio Mode зі згорнутим вікном. Окремо перевірте, чи не переривається звук після soft-reload.
Адресний рядок розпізнає домени, порти, localhost, локальні IPv4/IPv6 адреси, .local та IDN-домени й додає відповідну http:// або https:// схему. Текст із пробілами, однослівні адреси та невідомі схеми переходять у пошук Google. Через відсутність списку TLD рядки на кшталт readme.md можуть бути прийняті за домен — .md є справжньою доменною зоною.
Кнопка ⧉ та shortcut Ctrl+Shift+P перемикають системний Chromium Picture-in-Picture для доступного відео. PiP використовує відео основного фрейму; відео з cross-origin iframe та Shadow DOM цим способом недоступні. Перемикання логічної вкладки або навігація закриває PiP, оскільки застосунок використовує один спільний WebView2.
У налаштуваннях є секція «Оновлення». Перевірка GitHub Releases виконується лише після натискання кнопки користувачем, без автоматичних запитів на старті або таймера. Оновлювач перевіряє portable ZIP, розмір, SHA-256 за наявності, захищає розпакування від zip-slip і зберігає користувацькі файли та теки поруч із FoxBrowser.exe.
Хеш із того самого релізу GitHub захищає від пошкодження завантаження, але не замінює цифровий підпис і не захищає від підміни самого релізу.