Добавить в корзинуПозвонить
Найти в Дзене
Программы от меня

Как я написал свой браузер на C# и почему это было ошибкой (или нет)

Доброго времени суток, друзья! Все мы знаем: хороший программист отличается от плохого тем, что плохой программист пишет свой велосипед, а хороший — использует готовый. Сегодня я расскажу, как я перешагнул эту грань, решив, что миру срочно нужен ещё один браузер. Мой инструмент — C#, моя цель — величие, а результат вы сейчас увидите. Спойлер: Chrome я не победил, но пару раз поржал от души. Знаете, иногда утром просыпаешься, наливаешь кофе, смотришь на иконку Chrome и думаешь: «А чем я хуже?» В голове сразу возникает образ: мой браузер будет потреблять всего 2 ГБ оперативки (всего!), открывать вкладки быстрее, чем я успеваю моргнуть, и обязательно иметь кнопку «Сделать интернет быстрее». На деле же всё сводится к классической формуле: «а что, если я тоже так сделаю, но на шарпе?». Ну а почему нет? C# — отличный язык, .NET — мощная платформа, а Visual Studio даёт нам суперсилу в виде кнопки «Собрать решение». Что может пойти не так? Я не настолько безумен, чтобы писать рендеринг HTML
Оглавление



Доброго времени суток, друзья! Все мы знаем: хороший программист отличается от плохого тем, что плохой программист пишет свой велосипед, а хороший — использует готовый. Сегодня я расскажу, как я перешагнул эту грань, решив, что миру срочно нужен ещё один браузер. Мой инструмент — C#, моя цель — величие, а результат вы сейчас увидите. Спойлер: Chrome я не победил, но пару раз поржал от души.

Зачем вообще писать браузер, когда есть Chrome?

Знаете, иногда утром просыпаешься, наливаешь кофе, смотришь на иконку Chrome и думаешь: «А чем я хуже?» В голове сразу возникает образ: мой браузер будет потреблять всего 2 ГБ оперативки (всего!), открывать вкладки быстрее, чем я успеваю моргнуть, и обязательно иметь кнопку «Сделать интернет быстрее».

На деле же всё сводится к классической формуле: «а что, если я тоже так сделаю, но на шарпе?». Ну а почему нет? C# — отличный язык, .NET — мощная платформа, а Visual Studio даёт нам суперсилу в виде кнопки «Собрать решение». Что может пойти не так?

-2



Технологии: берём готовое и называем своим

Я не настолько безумен, чтобы писать рендеринг HTML с нуля. Спасибо Microsoft, которая подарила нам WebView2 — это, по сути, Edge Chromium, аккуратно упакованный в компонент для WinForms, WPF или даже MAUI.

Идея простая: мы берём этот элемент управления, натягиваем на него красивую обёртку, добавляем адресную строку, пару кнопок и гордо объявляем: «Я создал браузер!».

Минимальный код на WinForms выглядит настолько просто, что даже страшно:

public partial class MainForm : Form
{
private WebView2 webView;
private TextBox addressBar;
private Button goButton;

public MainForm()
{
InitializeComponent();
webView = new WebView2();
webView.Source = new Uri("https://ya.ru");
webView.NavigationCompleted += (s, e) =>
Text = $"SuperCSharpBrowser - {webView.Source}";
}

private void GoButton_Click(object sender, EventArgs e)
{
webView.CoreWebView2.Navigate(addressBar.Text);
}
}

Три строчки логики, и у нас уже есть работающий браузер. Правда, пока без вкладок, истории, менеджера паролей, защиты от фишинга и т.д. Но это же детали, правда?

Фичи, которые должны быть у каждого уважающего себя браузера

Чтобы мой «продукт» выглядел солидно, я добавил:

  1. Вкладки. Это было весело. Каждая вкладка — это отдельный экземпляр WebView2. Память? Не, не слышал. Зато теперь я могу открыть 3 вкладки, и диспетчер задач показывает, что моя программа съела 1.2 ГБ оперативки. Почти как Chrome, я в тренде!
  2. Кнопка «Ускорить». При нажатии на неё появляется MessageBox с текстом: «Браузер ускорен на 42%». На самом деле она просто открывает Chrome с тем же сайтом. Пользователи в восторге — эффект заметен невооружённым глазом.
  3. Тёмная тема. Ну а как без неё? Перекрасил фон адресной строки в чёрный, текст сделал белым. Готово! Можно выходить в релиз.
  4. Встроенный блокировщик рекламы. Работает по принципу «если реклама — не показываем сайт вообще». Чисто, минималистично. Пользователи жалуются, что «Яндекс» тоже перестал открываться, но я считаю, это фича.

-3

Подводные камни, о которых молчат на YouTube

Казалось бы, что может пойти не так? WebView2 стабилен, C# надёжен. Но дьявол, как всегда, в деталях.

Проблема первая: куки и сессии. По умолчанию WebView2 хранит данные в отдельной папке на диске. Если вы забудете указать путь к профилю, то после каждого перезапуска все пароли и логины будут «теряться». Мои первые тестировщики (я и кот) были в шоке, почему их «ВКонтакте» выкидывает каждые 5 минут.

Проблема вторая: безопасность. Когда вы встраиваете полноценный браузер в своё приложение, вы также встраиваете все его уязвимости. Хорошая новость: если хакер взломает мой браузер, он получит доступ к... ну, возможно, к коду кнопки «Ускорить». Невелика потеря.

Проблема третья: производительность. Один WebView2 живёт себе спокойно, кушает 100–150 МБ. А когда вы добавляете вкладки, начинается самое интересное. Каждая новая вкладка — это отдельный процесс (как и в Chrome), и они любят компанию. Мой рекорд — 4 ГБ оперативки на 10 вкладках. Это ещё и без расширений.

Почему это всё не зря?

Скажу честно: мой браузер не станет заменой Chrome или Firefox. Но процесс его создания подарил мне несколько бессонных ночей, пару седых волос и глубокое понимание, почему браузеры — это сложно.

Плюс я наконец-то понял, как работает та самая кнопка «Показать код элемента». Оказывается, это просто вызов webView.CoreWebView2.OpenDevToolsWindow().

И знаете что? Мне это было чертовски интересно. Когда ты сам собираешь свой велосипед, ты начинаешь понимать, как устроены все остальные велосипеды. Ты перестаёшь кидаться в разработчиков Chrome помидорами, потому что теперь знаешь, чего им это стоило.

Что в итоге?

Мой браузер, гордо названный «SuperCSharpBrowser 2000 Pro Max (beta)», живет и работает на моем компе. Он умеет открывать сайты, переключать вкладки и радовать пользователя кнопкой «Ускорить». Этого достаточно, чтобы считать проект успешным.

Если вы тоже хотите почувствовать себя создателем Chrome, дерзайте. Но помните: после того, как вы напишете свой браузер на C#, вы уже никогда не сможете смотреть на адресную строку так же, как раньше.

P.S. А если серьёзно, WebView2 — отличный инструмент, когда вам нужно встроить браузер в десктопное приложение. Но если вы решите составить конкуренцию Chrome — запаситесь пиццей, колой и, возможно, юристом.

P.P.S. Код скину в комментариях, если вдруг кому-то стало интересно. Но предупреждаю: я не несу ответственности за ваши попытки объяснить начальнику, почему вы два дня писали свой браузер вместо того, чтобы делать отчёт.