モバイルChromeで投稿を共有するとルートURLが返される

最近気づいたのですが、Android のモバイル Chrome で Discourse の投稿を開き、ブラウザの共有メニューから Outlook やメッセージなどのアプリを選択して共有しようとすると、常に実際の共有したい投稿の URL ではなく、Discourse のルート URL(例:https://discourse.domain.org)が送信されてしまいます。

「いいね!」 1

整理しますと:

  • 投稿の共有は正常に動作し、ネイティブの Web 共有 API を使用しています。

  • 投稿のタイムスタンプも正常に動作し、現在の URL で Discourse のツールチップを開きます。

ブラウザの 3 点メニューをクリックし、次に「共有」をクリックすると失敗します。Chrome Android はバージョン 64 以降、新しい「機能」としてページの正規リンク(canonical)を共有に使用します。正規リンクはサーバー側でのみ生成されるため、SPA 遷移時には更新されません。その結果、Android の共有メニューの機能は最初に読み込まれたページに固定されてしまいます。

この問題は Chrome 64 のリリース以来(2019-01-23T02:00:00Z)、発生しているようですが、あまり頻繁には利用されていないため、大きな問題にはなっていないようです。主な理由は、同じ API を使用した投稿レベルの共有ボタンを提供しており、それらはアクセスしやすく、より正確なためです。また、PWA モードのユーザーは 3 点メニューにアクセスできません。

修正するには、正規リンクをクライアント側でも計算して更新する必要がありますが、これは不愉快な重複を生み、最終的に同期がずれることになります。別の戦略としては、すべてのレスポンスでサーバーから正規リンクをリクエストする方法があります。

「いいね!」 4

情報ありがとうございます。Discourse の共有機能を使えることは知っていますが、どのウェブページでも使っているブラウザの共有機能に慣れすぎています。それほど重要な問題ではなく、Discourse ではあまり使っていないので、最近気づいただけです。ただ、再び使えると嬉しいです。

「いいね!」 1

これは @pmusaraj によって修正されました

「いいね!」 4

このトピックは47時間後に自動的に閉鎖されました。新しい返信は受け付けられなくなっています。

これを再度オープンします。この修正に対するリグレッションが報告されたためです。

「いいね!」 3