Discourse не загружается в устаревших браузерах

Я являюсь пользователем community(dot)jenkins(dot)io (извините, могу отправить только 2 ссылки). Согласно одному из администраторов, этот сайт использует экземпляр Discourse, спонсируемый официальной группой Discourse. В метатеге в заголовке/исходном коде указано Discourse 2.9.0.beta2.

В какой-то момент между понедельником и средой на этой неделе (14–16 марта 2022 года) сайт перестал загружаться в устаревших браузерах Firefox для Android. В частности, это касается Firefox Android 68.11.0. Этот же движок, очевидно, используется и в других браузерах, таких как Waterfox и Silk Browser на FireStick. Я ранее никогда не посещал этот сайт, но и он не загружается. Страница пытается получить данные в течение нескольких секунд, после чего экран становится пустым. Функция «Запросить версию для ПК» также отображается пустой. «Просмотр исходного кода» уходит в бездну пустоты.

Я сообщил об этом на сайте Jenkins, и администратор указал, что это, скорее всего, «потому что replaceAll недоступен в Firefox 68», предоставив доказательства от Saucelabs (ошибку видно примерно на отметке 00:17).

Ранее в этом месяце изменение в JavaScript второй раз нарушило функциональность StackOverflow (ссылка ниже) на сайтах StackOverflow/Exchange. Они уже ломали и исправляли это в декабре, и мы искренне надеемся, что они смогут отменить это изменение и восстановить функциональность.

Интересно, что я запустил ПК под управлением Windows XP с Firefox 52.9.0 ESR, и, несмотря на баннер «Ваш браузер слишком стар для работы на этом сайте», сайт, казалось, загружался нормально. Похоже, проблема довольно специфична и узкоспециализирована.

Я прошу команду Discourse проанализировать внесённые изменения и выяснить, есть ли способ смягчить этот нарушающий изменения. Я понимаю, что невозможно поддерживать что-либо вечно, особенно если это не входит в сферу тестирования, но когда проблема сообщается и если это очевидное исправление, которое не оказывает значительного влияния на работоспособность, прошу рассмотреть такую возможность. Я не требую восстановления всей функциональности, только базовой (как минимум — возможность читать контент).

Ссылка на StackExchange: meta(dot)stackexchange(dot)com/q/376694

10 лайков

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

Мы изучим эту регрессию в течение следующей недели.

8 лайков

replaceAll не поддерживается в iOS <= 13.3]("replaceAll" | Can I use... Support tables for HTML5, CSS3, etc)

Этот PR добавит проверку поддержки этой функции и в случае необходимости вернётся к базовому HTML-представлению:

12 лайков

3 сообщения были объединены в существующую тему: Frontend на продакшн-сайте не работает – ошибка Ember/Test

Спасибо @Ian_W за отчет :+1:

Мы уже исправили проблему. Эта тема закроется через день.

4 лайка

Сообщаю лишь о частичном успехе на устаревшей версии Firefox для Android.

И на meta.discourse.org, и на community.jenkins.io теперь отображается баннер «браузер слишком устарел», как и на ПК с Windows XP, где запущен FF 52.9.0 ESR.

При этом тем нет — только логотип и подвал [Главная .. Политика конфиденциальности].

На сайте Jenkins я вижу категории, их описания и количество тем, но при клике на любую категорию снова не могу увидеть ни одной темы.

4 лайка

1 лайк

Мне удалось заставить meta.discourse.org отобразить старую версию HTML в Firefox 40:

Это должно происходить во всех версиях Firefox < 77.

3 лайка

Как отмечалось, мой скриншот сделан на Android-версии. На десктопной версии сайт, похоже, работает нормально.

Я не знаю, как извлечь дополнительную информацию из браузера FF на Android, чтобы помочь в отладке.

3 лайка

Только что установил устаревший Fennec Firefox 68.9 на свой телефон, и он, похоже, теперь работает:

Есть какие-нибудь идеи, что я упускаю при попытке воспроизвести ошибку?

3 лайка

Что ж, не знаю, что и сказать. Я взял телефон с Android, сброшенный до заводских настроек (версия 7.0, так как телефон старый), загрузил Firefox для Android 68.11 APK, установил его и перешёл на meta(.)discourse(.)org ** — и получил предыдущий скриншот.

Затем всё становится странным. Перехожу на meta(.)discourse(.)org/t/ ** и получаю:

«Ой! Эта страница не существует или является приватной.

Но затем появляется список «Популярных» и «Недавних» тем, и я вижу эту самую тему.
При переходе по теме я вижу заголовок, а также метки «bug» и «pri-high», но нет содержимого.

**: пост с ограничением в 2 ссылки
(также не удаётся загрузить скриншоты через интерфейс, поэтому пришлось загружать их по одному в ответе)

1 лайк

1 лайк

Смотрю, вдруг кто-нибудь предложит решение для использования Discourse на iPhone 6, прежде чем мне придется покупать новый телефон.

1 лайк

У меня та же проблема, как объясняется ниже:

1 лайк

Для iOS < 13 или устаревшего Firefox Fennec на Android мы должны отображать HTML-представление.

Однако у нас не получается этого сделать, потому что HTML-представление отсутствует из-за

который существует в нашей кодовой базе уже очень давно.

Включение содержимого для краулеров, чтобы можно было перейти к HTML-представлению, требует значительных затрат, поэтому, возможно, стоит добавить старый Safari в

чтобы это выполнялось только при необходимости?

Другой альтернативой является указание Babel выполнить транспиляцию replaceAll или найти достаточно качественный полифилл.

cc @sam @david @gerhard

5 лайков

Другие варианты, которые я могу придумать:

  1. Полностью отказаться от browser_update_user_agents, используя XHR-запрос, совместимый с IE6, для получения контента для отображения на этих браузерах на мобильных устройствах. (Отключение JavaScript уже не работает на мобильных устройствах)

  2. Добавить полифилл для replaceAll

  3. Включать контент для поисковых роботов безусловно (в том числе на мобильных устройствах)

  4. То же, что и в пункте (1), но оставить настройку как микрооптимизацию, с откатом к XHR.

Я склоняюсь к вариантам между (1) и (3), (4).

7 лайков

3 — это то, что, боюсь, нам в конечном итоге придётся сделать, поскольку количество мобильных устройств, оставленных без поддержки их производителями, будет со временем только расти. Это увеличит нагрузку на сервер при заполнении шаблона и увеличит размер HTML на мобильных устройствах, но, на мой взгляд, мы должны это сделать.

Поэтому я предлагаю реализовать вариант 3 и одновременно проверить, насколько реалистично выполнить варианты 1 и 2.

5 лайков

Мы можем перевернуть всё с ног на голову и включить мобильную оптимизацию только для конкретных браузеров. Это позволит сохранить оптимизацию для 95% мобильного трафика, который к нам приходит, и при этом оставаться в полной безопасности.

3 лайка