Это странно… вы вошли в систему? Также пробовали ли вы провести пальцем вбок, чтобы увидеть, появится ли горизонтальная полоса прокрутки?
Если да, то интересно, происходит ли это только с учётными записями администраторов.
1 лайк
pmusaraj
(Penar Musaraj)
28.Апрель.2026 18:51:10
44
Я не авторизован, я пробовал свайпать влево-вправо.
Возможно, это проблема, возникающая у администраторов. В эмуляторе Chrome для мобильных устройств с обычным пользователем я не смог воспроизвести ошибку.
На самом деле: мне удалось воспроизвести проблему как администратору на нашем собственном блоге.
2 лайка
pmusaraj
(Penar Musaraj)
28.Апрель.2026 19:04:07
45
4 лайка
Отлично, спасибо! @pmusaraj
4 лайка
Thiago_Mobilon:
Текущий процесс немного убивает конверсию: пользователь нажимает «Войти» → открывается новая вкладка → выполняется вход → пользователь остаётся на главной странице сообщества. Вернувшись к записи блога, iframe по-прежнему отображается как неавторизованный, пока пользователь вручную не обновит всю страницу. Это запутанный цикл, из-за которого люди отказываются от комментариев и уходят.
Просто краткое уведомление: хотя этот процесс уже исправлен для Google One Tap, при использовании нативного входа в Discourse он всё ещё работает таким образом.
1 лайк
Falco
(Falco)
06.Май.2026 15:08:25
48
Мы работаем над улучшением этого процесса
main ← embed-full-app-signin-flow
drafted 04:08PM - 05 May 26 UTC
Previously, full app embeds loaded on a third-party domain could not see the for… um's session cookie, leaving users effectively logged out, and `showLogin` only opened a dead-end `/login` tab the iframe never reacted to.
This change adds an opt-in `embed_full_app_signin_flow` site setting that intercepts logged-out actions inside the iframe with a guided flow: an in-iframe modal opens a top-level sign-in tab that auto-closes via `postMessage` on success, and the iframe reloads to pick up the session cookie. On Safari, the flow first calls `requestStorageAccess()` to bypass ITP before opening the popup.
## Flow
1. User clicks an auth-gated action (Like, Reply CTA, etc.). `showLogin` / `showCreateAccount` (and the embed-topic-footer reply CTA) route into the new `embed-auth-flow` service.
2. **Safari only**: if `hasStorageAccess()` is false, an in-iframe modal asks the user to share their session. Confirming calls `requestStorageAccess()` (synchronously inside the click handler so user activation is preserved), persists the original intent, and reloads the iframe.
3. A sign-in modal opens a top-level `/login?embed_signin_callback=1` (or `/signup`) tab. A new `embed-signin-popup-callback` initializer detects a successful sign-in in that tab, posts a message to the opener, and closes the tab.
4. The iframe reloads on the explicit `postMessage` success signal so the user picks up their session. Plain popup close (user dismissed) tears down silently — no false "signed in" state.
## Setting
- `embed_full_app_signin_flow` (boolean, default `false`, in the `embedding` area). Off by default; the existing Safari-only on-load storage access prompt and the legacy `window.open("/login")` paths continue to run when the flag is off.
- Activating this requires the embed to be **same-site** to the host page (e.g. `forum.discourse.org` ↔ `meta.discourse.org`) **or** `same_site_cookies = "None"` for cross-site embeds. The browser's SameSite policy still applies to cookies after `requestStorageAccess()`, so cross-site Lax/Strict cookies cannot be delivered to the iframe.
## Implementation notes
- **User activation preserved.** The modal is rendered via `service:modal` with native `<button {{on "click" handler}}>` elements rather than `service:dialog` (which wraps actions in `next()` and breaks user activation), so `requestStorageAccess()` and `window.open()` see a live activation token.
- **Intent persisted across reload.** Sign-up vs. sign-in intent survives the storage-access reload via `sessionStorage`.
- **API-unsupported fallback.** On Safari without `document.requestStorageAccess`, the service opens a plain top-level login tab (no callback) instead of trapping the user in a popup that cannot bridge cookies.
- **Storage access denial is a dead-end on purpose.** The catch handler does not chain to a sign-in popup, since a sign-in tab cannot help an iframe that lacks storage access. The user retries the action to be re-prompted.
## Tests
`tests/unit/services/embed-auth-flow-test.js` covers the state machine: gating, the Safari/non-Safari split for Storage Access, post-reload handling (including signup-intent preservation), denial behaviour, popup URL routing, and the API-unsupported fallback.
Это сложное изменение, но мы надеемся, что сможем улучшить пользовательский опыт.
6 лайков
Я обнаружил ещё одну ошибку в интерфейсе:
Когда я нажимаю на редактирование своего сообщения, в нижней части iframe появляется пустое пространство без содержимого. Стандартная форма остаётся открытой, но мой комментарий не находится внутри неё для редактирования. Кроме того, элемент, отображающий количество сообщений в теме, сдвигается влево.
1 лайк
Falco
(Falco)
07.Май.2026 20:27:44
50
Звучит похоже на баг в композиторе AI-бота, верно, @keegan ?
1 лайк
keegan
(Keegan George)
08.Май.2026 20:29:15
52
Thiago_Mobilon:
При нажатии на кнопку редактирования моего сообщения в нижней части iframe появляется пустое пространство без содержимого. Форма «стандартного» вида остаётся открытой, но мой комментарий внутри неё для редактирования не отображается. Кроме того, элемент, показывающий количество постов в теме, сдвигается влево.
Эта проблема теперь должна быть решена с помощью:
committed 06:11PM - 08 May 26 UTC
**Previously**, clicking "edit" on a post in embed mode or an AI bot PM
would op… en the standard floating composer.
**This change** adds inline edit support to both the embed-mode and AI
bot docked composers, intercepting the edit action via app events and
handling the PUT request directly, so users never leave the docked
composer flow.
----
Embed Mode:
<img width="670" height="401" alt="embed-mode"
src="https://github.com/user-attachments/assets/bd11afc6-b7f0-456d-b0be-ddb48fdd964e"
/>
AI Bot:
<img width="786" height="230" alt="ai-bot"
src="https://github.com/user-attachments/assets/7c63fa08-cb03-4a5a-9405-b0f204264d02"
/>
5 лайков
Я как раз изучал статистику и задаюсь вопросом, всё ли работает так, как ожидалось. В разделе «Встроенные просмотры» я вижу меньше 400 ежедневных просмотров страниц.
Для контекста: до перехода на полное внедрение приложения весь «Сообщество» получал около 8 тысяч просмотров страниц в день, а с момента запуска эта цифра выросла более чем в 5 раз.
Разве эта разница не должна отражаться в разделе «Встроенные просмотры»?
1 лайк
Falco
(Falco)
15.Май.2026 17:09:29
55
Thiago_Mobilon:
5. Трение при входе
Текущий процесс немного убивает конверсию: пользователь нажимает «Войти» → открывается новая вкладка → происходит вход → пользователь остаётся на главной странице сообщества. Вернувшись к посту в блоге, iframe всё ещё отображается как неавторизованный, пока пользователь вручную не обновит всю страницу. Это запутанный цикл, из-за которого люди отказываются от идеи и уходят, не оставив комментарий.
Поскольку мы активировали новый встроенный элемент, количество ежедневных регистраций более чем удвоилось , что отлично. Однако метрики вовлечённости не изменились. Фактически, показатель DAU/MAU снизился — у нас больше авторизованных пользователей, но они не взаимодействуют. Такие метрики, как «Ежедневные активные пользователи», «Новые участники» и «Количество публикаций», не показали никакого роста.
Это доказывает, что люди хотят присоединиться к обсуждению, но они теряются в цикле входа и покидают пост, не успев оставить комментарий.
Теперь это исправлено. Пожалуйста, обновитесь, чтобы получить новый процесс входа.
main ← embed-full-app-signin-flow
merged 04:07PM - 15 May 26 UTC
Previously, full app embeds loaded on a third-party domain could not see the for… um's session cookie, leaving users effectively logged out, and `showLogin` only opened a dead-end `/login` tab the iframe never reacted to.
This adds an `embed_full_app_signin_flow` site setting (on by default, gated to full app embed mode) that intercepts logged-out actions inside the iframe with a guided flow: bridge storage access if the iframe's cookie jar is partitioned, then either reload (if the user is already signed in elsewhere) or open a top-level sign-in tab and watch the session via polling.
## Flow
1. User clicks an auth-gated action (Reply CTA, Like, etc.). `showLogin` / `showCreateAccount` and the embed-topic-footer reply CTA route into the new `embed-auth-flow` service.
2. **If `document.hasStorageAccess()` is `false`** — Safari ITP, Firefox Total Cookie Protection, Chrome's 3p cookie phaseout — an in-iframe modal asks the user to share their session. Confirming calls `requestStorageAccess()` (synchronously inside the click handler so user activation is preserved).
3. Once we have access, the service probes `/session/current.json`. If the user is already signed in elsewhere (common Firefox ETP scenario), the iframe reloads to pick up the session — no popup.
4. Otherwise, a sign-in modal opens a top-level `/login?embed_signin_callback=1` (or `/signup`) tab and shows a waiting state with a spinner. The iframe polls `/session/current.json` every 3s for up to 5 min.
5. When polling sees a logged-in response, the iframe reloads. The popup self-closes once it has a session, driven by the `embed_signin_callback` query param + sessionStorage flag.
## Why polling instead of `postMessage`
The popup-side callback originally posted a success message back to the opener. Discourse's default `Cross-Origin-Opener-Policy` (`same-origin-allow-popups`) typically mismatches an embedding host's (`unsafe-none`), which severs `window.opener` on the popup's very first load — and any OAuth provider redirect amplifies this. Polling sidesteps the whole opener relationship and works regardless of COOP, OAuth, or the user opening the link in a new tab.
## Setting
- `embed_full_app_signin_flow` (boolean, default `true`, in the `embedding` area).
- The flow assumes the iframe can receive its cookies after popup sign-in — true when the embed is **same-site to the host page** (any SameSite setting) or when `same_site_cookies = "None"` is configured for cross-site embeds. We trust the admin to enable this only on a compatible deployment.
## Implementation notes
- **Browser-agnostic storage access.** `hasStorageAccess()` is the single signal — `true` on same-site/same-origin embeds (no prompt needed), `false` whenever the iframe's cookie jar is partitioned. No browser sniffing.
- **User activation preserved.** The modal uses native `<button {{on "click" handler}}>` rather than `service:dialog`, so `requestStorageAccess()` and `window.open()` see a live activation token in the click handler.
- **No reload after storage access.** `requestStorageAccess()` grants access for the current document; we chain directly into the next step in the same execution. Reloading would put the iframe back in partitioned mode in most browsers.
- **Popup self-close is param-driven, not opener-driven.** The callback initializer keys off `?embed_signin_callback=1` alone — `window.opener` is unreliable thanks to COOP.
- **API-unsupported fallback.** Without `document.requestStorageAccess`, the service opens a plain top-level login tab (no callback param) instead of trapping the user in a popup that cannot bridge cookies.
- **Storage access denial is a dead-end on purpose.** The catch handler does not chain to a sign-in popup, since a sign-in tab cannot help an iframe that lacks storage access. The user retries the action to be re-prompted.
- **Waiting modal.** While polling, the iframe shows a spinner and "Waiting for sign-in" message. Cancel stops the poll and closes the popup; the modal auto-dismisses on timeout.
## Tests
`tests/unit/services/embed-auth-flow-test.js` covers gating, the partitioned vs. non-partitioned split, the storage-access → sign-in chain, the already-signed-in → reload path, denial behaviour, popup URL routing, and the API-unsupported fallback.
4 лайка
Я думаю, что новая функция вложенных ответов может быть несовместима с режимом Embed.
Я включил вложенные ответы в теме для теста, и вместо загрузки раздела комментариев фрейм загрузил пост внутри поста.
1 лайк