# Discourse не отображается в Gecko до версии 74

**URL:** https://meta.discourse.org/t/discourse-does-not-render-on-gecko-before-version-74/193241
**Category:** Bug
**Created:** [09.Июнь.2021 04:55:18 UTC](https://meta.discourse.org/t/discourse-does-not-render-on-gecko-before-version-74/193241 "2021-06-09T04:55:18Z")
**Posts on this page:** 20
**Page:** 1

<div class="post-metadata">

### Author: ![vige](https://avatars.discourse-cdn.com/v4/letter/v/46a35a/32.png) [@vige](https://meta.discourse.org/u/vige)
#### Post date: [09.Июнь.2021 04:55:18 UTC](https://meta.discourse.org/t/discourse-does-not-render-on-gecko-before-version-74/193241/1 "2021-06-09T04:55:18Z")

</div>

Коммит 08883cbdd1c39a0c15b97af44ddaefe14acdc21a нарушил рендеринг в Discourse на старых выпусках Gecko. В версиях Gecko ранее 74 оператор optional chaining не поддерживается.

Дополнительную информацию см. по ссылке [https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Optional\_chaining#browser\_compatibility](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Optional_chaining#browser_compatibility).

---

<div class="post-metadata">

### Author: ![sam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sam/32/102149_2.png) [@sam](https://meta.discourse.org/u/sam)
#### Post date: [09.Июнь.2021 05:09:38 UTC](https://meta.discourse.org/t/discourse-does-not-render-on-gecko-before-version-74/193241/2 "2021-06-09T05:09:38Z")

</div>

О, мы же должны транспилировать это, @pmusaraj / @eviltrout / @j.jaffeux?

---

<div class="post-metadata">

### Author: ![j.jaffeux](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/j.jaffeux/32/60297_2.png) [@j.jaffeux](https://meta.discourse.org/u/j.jaffeux)
#### Post date: [09.Июнь.2021 09:03:57 UTC](https://meta.discourse.org/t/discourse-does-not-render-on-gecko-before-version-74/193241/3 "2021-06-09T09:03:57Z")

</div>

Возможно, я ошибаюсь, но первоначальное предположение состоит в том, что мы не определяем список браузеров, и используется значение по умолчанию (скорее всего, [@babel/preset-env · Babel](https://babeljs.io/docs/en/babel-preset-env)), которое не считает эту версию поддерживаемой, поэтому код не транспилируется.

Это странно, ведь Firefox 74 — всего лишь годичной давности, но посмотрим на текущий список браузеров:

```plaintext
$ npx browserslist
...
firefox 89
firefox 88
firefox 78
...

```

Теперь вопрос: @sam, хотим ли мы это поддерживать? Хотя версии всего год, текущая версия Firefox — 89, то есть эта версия отстает на 15 релизов. Не уверен, решение за вами. Важно учитывать, что поддержка этой версии увеличит размер полезной нагрузки для всех, поскольку транспиляция работает примерно как полифилл (добавление некоторых функций для поддержки этой версии и замена синтаксиса на вызовы функций).

---

<div class="post-metadata">

### Author: ![RGJ](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/rgj/32/523185_2.png) [@RGJ](https://meta.discourse.org/u/RGJ)
#### Post date: [09.Июнь.2021 09:04:41 UTC](https://meta.discourse.org/t/discourse-does-not-render-on-gecko-before-version-74/193241/4 "2021-06-09T09:04:41Z")

</div>

(В стабильной версии это [UX: Add auto focus to hamburger and user menu dropdowns (#13165) · discourse/discourse@45dca79 · GitHub](https://github.com/discourse/discourse/commit/45dca791b0c))

Из любопытства: старый стиль кода работает хорошо, почему бы пока не придерживаться его? 🤔 [FIX: We can't use `?.` yet (#13168) · discourse/discourse@96fd202 · GitHub](https://github.com/discourse/discourse/commit/96fd202d9cdac98196abd952c53f583b4af9d8f2)

---

<div class="post-metadata">

### Author: ![j.jaffeux](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/j.jaffeux/32/60297_2.png) [@j.jaffeux](https://meta.discourse.org/u/j.jaffeux)
#### Post date: [09.Июнь.2021 09:16:18 UTC](https://meta.discourse.org/t/discourse-does-not-render-on-gecko-before-version-74/193241/5 "2021-06-09T09:16:18Z")

</div>

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

---

<div class="post-metadata">

### Author: ![sam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sam/32/102149_2.png) [@sam](https://meta.discourse.org/u/sam)
#### Post date: [09.Июнь.2021 10:12:45 UTC](https://meta.discourse.org/t/discourse-does-not-render-on-gecko-before-version-74/193241/6 "2021-06-09T10:12:45Z")

</div>

> [@j.jaffeux](#):
>
> Теперь вопрос: @sam, хотим ли мы поддерживать это?

Я не против отказаться от поддержки, при условии, что у нас есть HTML-резервный вариант.

Одно мы точно не можем сделать: показывать работающую статическую страницу в IE9, но сломанную — в Firefox одного года выпуска.

Я предпочитаю просто транспилировать код под Firefox/Chrome возрастом 2–3 года, но готов оставить это решение за @eviltrout и вами. Мы можем быть более агрессивными, но не можем показывать сломанные страницы.

Редакция: см. обратную ссылку. Это может стать довольно серьёзной проблемой на Android, где обновление браузеров часто происходит с большим запозданием.

---

<div class="post-metadata">

### Author: ![TallTrees](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/talltrees/32/208620_2.png) [@TallTrees](https://meta.discourse.org/u/TallTrees)
#### Post date: [09.Июнь.2021 11:49:18 UTC](https://meta.discourse.org/t/discourse-does-not-render-on-gecko-before-version-74/193241/7 "2021-06-09T11:49:18Z")

</div>

> [@sam](#):
>
> Мы не можем отображать повреждённые страницы

Я полностью согласен, и меня действительно беспокоит, что в последнее время совместимость браузеров несколько пострадала.

Также на iOS была такая проблема: [Safari (iOS) shows blank pages on Discourse instances after beta 8 due to manually disable IntersectionObserver](https://meta.discourse.org/t/safari-ios-shows-blank-pages-on-discourse-instances-after-beta-8-due-to-manually-disable-intersectionobserver/189799)

---

<div class="post-metadata">

### Author: ![j.jaffeux](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/j.jaffeux/32/60297_2.png) [@j.jaffeux](https://meta.discourse.org/u/j.jaffeux)
#### Post date: [09.Июнь.2021 11:54:22 UTC](https://meta.discourse.org/t/discourse-does-not-render-on-gecko-before-version-74/193241/8 "2021-06-09T11:54:22Z")

</div>

Да, согласен, как минимум нам стоит внедрить поддержку browserlist, чтобы неподдерживаемые функции не стали для нас сюрпризом

---

<div class="post-metadata">

### Author: ![mstm](https://avatars.discourse-cdn.com/v4/letter/m/6de8d8/32.png) [@mstm](https://meta.discourse.org/u/mstm)
#### Post date: [09.Июнь.2021 12:12:41 UTC](https://meta.discourse.org/t/discourse-does-not-render-on-gecko-before-version-74/193241/9 "2021-06-09T12:12:41Z")

</div>

Может ли эта проблема ограничивать индексацию в Google?

Хочу понять, нужно ли мне искать причину блокировки индексации в другом месте.

Спасибо.

---

<div class="post-metadata">

### Author: ![pmusaraj](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pmusaraj/32/119489_2.png) [@pmusaraj](https://meta.discourse.org/u/pmusaraj)
#### Post date: [09.Июнь.2021 13:46:19 UTC](https://meta.discourse.org/t/discourse-does-not-render-on-gecko-before-version-74/193241/10 "2021-06-09T13:46:19Z")

</div>

Я не могу воспроизвести проблему OP на meta. Я пробовал через Browserstack с использованием Firefox 73 на macOS и Firefox 68 на Windows. @vige, ты можешь воспроизвести проблему на meta?

---

<div class="post-metadata">

### Author: ![j.jaffeux](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/j.jaffeux/32/60297_2.png) [@j.jaffeux](https://meta.discourse.org/u/j.jaffeux)
#### Post date: [09.Июнь.2021 15:29:50 UTC](https://meta.discourse.org/t/discourse-does-not-render-on-gecko-before-version-74/193241/11 "2021-06-09T15:29:50Z")

</div>

Я думаю, вы правы, это действительно должно работать. Я просто посмотрел код в браузере:

```js
    toggleHamburger: function toggleHamburger() {
      this.state.hamburgerVisible = !this.state.hamburgerVisible;
      this.toggleBodyScrolling(this.state.hamburgerVisible); // автофокус на первой ссылке в выпадающем меню

      (0, _runloop.schedule)("afterRender", function () {
        var _document$querySelect2;

        (_document$querySelect2 = document.querySelector(".hamburger-panel .menu-links a")) === null || _document$querySelect2 === void 0 ? void 0 : _document$querySelect2.focus();
      });
    },

```

Обратите внимание, что нам всё же стоит попытаться точно определить, что именно транспилируется, а что нет, даже если проблема может быть не в этом.

---

<div class="post-metadata">

### Author: ![j.jaffeux](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/j.jaffeux/32/60297_2.png) [@j.jaffeux](https://meta.discourse.org/u/j.jaffeux)
#### Post date: [09.Июнь.2021 15:55:11 UTC](https://meta.discourse.org/t/discourse-does-not-render-on-gecko-before-version-74/193241/12 "2021-06-09T15:55:11Z")

</div>

Поправьте меня, если я ошибаюсь, @pmusaraj, но, поскольку мы не задаём preset-env и, как следствие, не определяем цели, применяются все включённые плагины. В результате proposal-optional-chaining точно будет применён.

Меня это устраивает, возможно, нам просто нужно ежегодно проверять каждый плагин и решать, всё ещё ли он нужен?

---

<div class="post-metadata">

### Author: ![RGJ](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/rgj/32/523185_2.png) [@RGJ](https://meta.discourse.org/u/RGJ)
#### Post date: [09.Июнь.2021 16:17:39 UTC](https://meta.discourse.org/t/discourse-does-not-render-on-gecko-before-version-74/193241/13 "2021-06-09T16:17:39Z")

</div>

> [@j.jaffeux](#):
>
> В результате proposal-optional-chaining точно применяется.

Нашёл. Сломана только ветка `stable`. Там `proposal-optional-chaining` не применяется.

В `tests-passed` изменение с `?.` включает в себя изменение `proposal-optional-chaining`: [DEV: Enable optional chaining in all contexts (#13180) · discourse/discourse@855e854 · GitHub](https://github.com/discourse/discourse/commit/855e854cb8501fdf4e84e3b0f45ad38bc755ae57#diff-0bede20282d81a4c18a423308c91c3f87bce2e4852c9b81605a57a13eeb63e9a)

а в `stable` было сделано только изменение кода с `?.`, но настройки транспилятора не были скорректированы: [UX: Add auto focus to hamburger and user menu dropdowns (#13165) · discourse/discourse@45dca79 · GitHub](https://github.com/discourse/discourse/commit/45dca791b0cdd61a46533db5c86480d97a6cb8de)

---

<div class="post-metadata">

### Author: ![j.jaffeux](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/j.jaffeux/32/60297_2.png) [@j.jaffeux](https://meta.discourse.org/u/j.jaffeux)
#### Post date: [09.Июнь.2021 16:25:28 UTC](https://meta.discourse.org/t/discourse-does-not-render-on-gecko-before-version-74/193241/14 "2021-06-09T16:25:28Z")

</div>

Да, верно подмечено:

 ![Capture d'écran 2021-06-09 à 18.21.51](https://global.discourse-cdn.com/meta/original/3X/4/9/49d7d19eded0f7fb441c4bc90825786ea2113e13.png)

- мы добавили код с опциональной цепочкой вызовов
- затем отменили это изменение
- после чего добавили его обратно с правильным плагином Babel

Однако 5 дней назад мы перенесли только исходный коммит, без плагина:

> <https://github.com/discourse/discourse/commit/45dca791b0cdd61a46533db5c86480d97a6cb8de>

@pmusaraj, думаю, что перенос плагина в стабильную ветку тоже будет безопасным, не так ли?

---

<div class="post-metadata">

### Author: ![pmusaraj](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pmusaraj/32/119489_2.png) [@pmusaraj](https://meta.discourse.org/u/pmusaraj)
#### Post date: [09.Июнь.2021 16:27:20 UTC](https://meta.discourse.org/t/discourse-does-not-render-on-gecko-before-version-74/193241/15 "2021-06-09T16:27:20Z")

</div>

Да, согласен, мы должны сделать бэкпорт. Я займусь этим позже сегодня.

---

<div class="post-metadata">

### Author: ![pmusaraj](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pmusaraj/32/119489_2.png) [@pmusaraj](https://meta.discourse.org/u/pmusaraj)
#### Post date: [09.Июнь.2021 18:51:52 UTC](https://meta.discourse.org/t/discourse-does-not-render-on-gecko-before-version-74/193241/16 "2021-06-09T18:51:52Z")

</div>

Это уже исправлено в стабильной версии (v2.7.4): плагин `proposal-optional-chaining` для Babel теперь включён, что решает проблему.

Спасибо @RGJ @j.jaffeux (и @vige за первоначальный отчёт)!

---

<div class="post-metadata">

### Author: ![eviltrout](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/eviltrout/32/5275_2.png) [@eviltrout](https://meta.discourse.org/u/eviltrout)
#### Post date: [09.Июнь.2021 20:24:32 UTC](https://meta.discourse.org/t/discourse-does-not-render-on-gecko-before-version-74/193241/17 "2021-06-09T20:24:32Z")

</div>

Ага, теперь всё встало на свои места! Код уже в стабильной версии, а вот транспайлер ещё нет. Спасибо, что проделали работу детектива.

---

<div class="post-metadata">

### Author: ![lcb](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/lcb/32/217689_2.png) [@lcb](https://meta.discourse.org/u/lcb)
#### Post date: [09.Июнь.2021 20:48:19 UTC](https://meta.discourse.org/t/discourse-does-not-render-on-gecko-before-version-74/193241/18 "2021-06-09T20:48:19Z")

</div>

Огромное спасибо всем разработчикам за то, что так быстро исправили это!

К сведению, по моим тестам, эта ошибка в некоторых случаях также затрагивала последнюю версию Microsoft Edge для Android (которая, насколько мне известно, не использует движок Gecko).

---

<div class="post-metadata">

### Author: ![RGJ](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/rgj/32/523185_2.png) [@RGJ](https://meta.discourse.org/u/RGJ)
#### Post date: [10.Июнь.2021 19:20:13 UTC](https://meta.discourse.org/t/discourse-does-not-render-on-gecko-before-version-74/193241/19 "2021-06-10T19:20:13Z")

</div>

> [@pmusaraj](#):
>
> Это уже исправлено в стабильной версии (v2.7.4)

Не могли бы вы добавить тег `v2.7.4` к этому релизу?  
Я потратил полчаса, пытаясь выполнить `git checkout v2.7.4`, но оказалось, что такого тега не существует 😅

---

<div class="post-metadata">

### Author: ![neil](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/neil/32/102150_2.png) [@neil](https://meta.discourse.org/u/neil)
#### Post date: [10.Июнь.2021 20:26:23 UTC](https://meta.discourse.org/t/discourse-does-not-render-on-gecko-before-version-74/193241/21 "2021-06-10T20:26:23Z")

</div>

Извините за это. Теперь он [помечен](https://github.com/discourse/discourse/tree/v2.7.4).

[Следующая страница](https://meta.discourse.org/t/discourse-does-not-render-on-gecko-before-version-74/193241.md?page=2)
