Назад

Браузеры «на костылях»: почему Safari и Firefox содержат тысячи строк кода для крупных сайтов 🩼

Как Safari и Firefox применяют адресные хаки для крупных сайтов и чем доминирование Chrome оборачивается для других движков.

Браузеры «на костылях»: почему Safari и Firefox содержат тысячи строк кода для крупных сайтов 🩼

Помните эпоху Internet Explorer, когда разработчикам приходилось писать тонны хаков под один браузер? История сделала круг, но теперь всё наоборот. Из-за тотального доминирования Chrome другие браузерные движки вынуждены адаптироваться под код, написанный исключительно под стандарты Google.

Ден Оделл в своём блоге разбирает удивительный факт: Safari и Firefox буквально напичканы кастомными инъекциями кода для популярных сайтов, чтобы те просто… не ломались. Популярные сервисы (TikTok, Netflix, Instagram, Reddit) часто игнорируют веб-стандарты или некорректно определяют браузер, и создателям движков приходится подставлять костыли на лету.

Как это устроено под капотом:

🌐 Safari: содержит огромный файл Quirks.cpp (уже более 4000 строк кода!). Браузер проверяет домен пользователя и, если он совпадает с условным tiktok.com или reddit.com, включает специфичное поведение для рендеринга или обработки событий.

🌐 Firefox: использует встроенное системное расширение WebCompat. Вы можете вбить в адресную строку about:compat и лично увидеть интерактивный список «интервенций» для конкретных сайтов с возможностью их отключения.

⚙️ Реальные примеры этих инъекций:

Фейковый Chrome внутри Firefox. Многие сайты до сих пор проверяют наличие объекта window.chrome, чтобы отдавать продвинутый плеер или оптимизированный скрипт. Если Firefox видит такой сайт, его расширение WebCompat на лету создает глобальные переменные:

// Симуляция окружения Blink внутри Firefox для избранных доменов
window.chrome = { runtime: {}, loadTimes: function () {} };
navigator.vendor = "Google Inc.";

Костыли для видео в Safari. Facebook, Twitter и Reddit любят агрессивно ставить видео на паузу, как только элемент скрывается из зоны видимости. Но это ломает системный режим «Картинка в картинке». В WebKit встроен хак requiresUserGestureToPauseInPictureInPicture, который принудительно запрещает сайтам останавливать видео, если пользователь вынес его в отдельное окно.

Итог неутешителен: Chrome стал новым стандартом де-факто. Если сайт работает в Chrome, разработчики часто даже не открывают другие браузеры. А меньшинству в лице Safari и Firefox приходится тратить ресурсы не на инновации, а на ручную поддержку чужих ошибок.

Читать статью

Скопировано