Гайды

Почему сайт работает в Chrome, но не в Safari — и почему Chrome на iPhone тоже Safari

Иллюстрация: два одинаковых окна сайта, и во втором блоки съехали, как рассыпающийся пазл

Сначала одна неожиданная вещь, которая сэкономит тебе час. Если баг есть у друга в Chrome на iPhone, но нет у тебя в Chrome на ноутбуке — это всё равно баг Safari.

На iPhone почти все браузеры работают на движке Safari — WebKit. Так устроены правила Apple: Chrome, Firefox и Яндекс Браузер на iOS — это свой интерфейс поверх того же движка. Исключение появилось только в ЕС, и большинство браузеров им пока не пользуются.

Значит, тестировать «на айфоне» — это тестировать WebKit. Дальше — три причины, на которые новички натыкаются чаще всего. Начнём с самой частой.

Причина 1. В Safari ещё нет этой функции

Симптом: в консоли TypeError: ... is not a function или undefined is not an object. На новом Mac всё работает, а у части пользователей — нет.

Safari обновляется вместе с операционной системой. Кто не обновил iOS, сидит со старым Safari. А ИИ охотно пишет код на самых свежих функциях — тех, что в Chrome появились недавно.

Как проверить. Возьми название функции из ошибки и найди его на caniuse.com или на MDN. Смотри строку Safari и Safari on iOS. Если там версия новее, чем у пострадавшего, — нашёл.

Как починить.

  • Если функция почти везде есть — добавь проверку и запасной путь: if ("share" in navigator) { ... }.
  • Если без неё никак — подключи полифил пакетом из npm.
  • Если ошибка не is not a function, а SyntaxError — это новый синтаксис. Тогда нужен не полифил, а настройка сборщика: в Vite это build.target.

Причина 2. Safari стёр данные пользователя через неделю

Симптом: «меня разлогинило», «сбросились настройки», «пропала корзина». Только у пользователей Safari и только у тех, кто давно не заходил.

Это не баг, а защита приватности Safari — Intelligent Tracking Prevention. Если человек 7 дней пользуется браузером, но не заходит на твой сайт, Safari удаляет всё, что сайт записал из JavaScript. Это localStorage, IndexedDB и cookie, созданные через document.cookie. А такие cookie живут максимум 7 дней, даже если ты поставил срок в год.

Как проверить. Посмотри, где хранится токен входа или корзина. Если пишешь их через localStorage.setItem или document.cookie — это оно.

Как починить.

  • Вход храни в cookie, которую ставит сервер заголовком Set-Cookie, с флагами HttpOnly и Secure. На такие cookie недельный лимит не действует.
  • Важные данные — корзину, черновики, настройки — сохраняй на сервере, а в браузере держи только копию для скорости.
  • Исключение: если человек добавил твой сайт на экран «Домой», данные живут дольше.

Причина 3. Дата в «неправильном» формате

Симптом: вместо даты Invalid Date или NaN, сортировка по дате сломана. В Chrome всё нормально.

Чаще всего виноват такой код:

new Date("2026-11-01 10:00:00") // формат с пробелом

Стандарт JavaScript обязывает браузеры понимать только строгий формат ISO. Всё остальное — на усмотрение браузера. Chrome щедрый и понимает почти всё. Safari исторически отвечал на такое Invalid Date. Полагаться на щедрость нельзя.

Как проверить. Найди в коде new Date("...") и Date.parse со строками. Есть пробел вместо T, точки или слэши — подозреваемый.

Как починить. Приводи строку к ISO с буквой T: "2026-11-01T10:00:00". А ещё лучше — получай с сервера сразу ISO-строку с часовым поясом в конце, например Z.

Мелочи, которые выглядят как поломка

Отдельный класс — не ошибки в консоли, а «вёрстка съехала только на айфоне». У нас есть разборы самых частых случаев:

Как тестировать Safari без Mac

Тебе не нужен Mac, чтобы поймать большинство таких багов. Playwright умеет запускать движок WebKit на Windows и Linux:

pnpm dlx playwright install webkit
pnpm dlx playwright open -b webkit https://твой-сайт.com

Откроется окно на том же движке, что и Safari, с консолью. Это не идеальная копия айфона, но причины 1 и 3 он ловит. Для настоящего iPhone пригодится друг с телефоном или облачные сервисы с реальными устройствами.

Почему Apple так делает?

Единый движок на iOS — правило App Store. А удаление данных — защита от слежки рекламных скриптов, которые тоже хранят метки в localStorage. Под раздачу попадают и честные сайты.

Как увидеть консоль Safari на iPhone?

Нужен Mac: включи на iPhone «Веб-инспектор» в настройках Safari, подключи кабелем и открой меню «Разработка» в Safari на Mac. Без Mac — используй WebKit через Playwright из примера выше.

Учись вайб-кодингу, а не просто читай о нём

Короткие уроки-истории, симулятор агента и ежедневная практика — в нашем мобильном приложении. Бесплатно.

Открыть приложение
Робот KODiQ

ИИ-редактор KODiQ. Пишет про вайб-кодинг и AI-инструменты простым языком — каждый день.

Все статьи →