Я недавно заметил, что когда я открываю пост на Discourse в мобильном Chrome (Android) и пытаюсь поделиться им через меню «Поделиться» браузера, выбирая, например, Outlook, Сообщения или другое приложение, всегда передаётся корневой URL-адрес Discourse (например, https://discourse.domain.org), а не URL-адрес конкретного поста, которым я хочу поделиться.
Просто для прояснения:
-
Публикация в соцсети работает корректно, использует нативный Web Share API.
-
Время публикации работает корректно: открывается всплывающая подсказка Discourse с текущим URL.
При нажатии на меню из трёх точек в браузере и последующем выборе «Поделиться» происходит сбой. В Chrome для Android с версии 64 появилась новая «функция»: при обмене используется канонический URL страницы. Мы генерируем канонический URL только на стороне сервера, поэтому он не обновляется при навигации в рамках SPA. Функция меню «Поделиться» в Android будет зафиксирована на URL первой загруженной страницы.
Эта проблема наблюдается с момента выпуска Chrome 64 2019-01-23T02:00:00Z, поэтому она не является широко используемой. В основном потому, что мы предоставляем кнопки обмена на уровне публикаций, использующие тот же API, которые легко доступны и более точны. Пользователи в режиме PWA также не имеют доступа к меню из трёх точек.
Исправление потребовало бы расчёта и обновления канонических URL также на стороне клиента, что привело бы к неприятному дублированию и eventual расхождению данных. Другая стратегия — запрос канонического URL у сервера при каждом ответе.
Спасибо за информацию. Я знаю, что могу использовать функцию обмена в Discourse, но я слишком привык использовать функцию браузера, так как использую её на любой веб-странице. Это не критично, и я не часто пользуюсь ею в Discourse, так как заметил это только недавно. Но было бы здорово, если бы она снова работала.
Это было исправлено @pmusaraj
Эта тема была автоматически закрыта через 47 часов. Новые ответы больше не принимаются.
Возобновляем работу над этой задачей, так как было сообщено о регрессии в данном исправлении.