X(旧Twitter)のシェアボタンから他のSNSへ投稿できるブラウザ拡張機能「ShareSwitch」をリリースしました!

 

Xのシェアボタンから他のSNSへ投稿できるブラウザ拡張機能ShareSwitch」の紹介記事です。

 

動機

Bluesky, Mastodon, Misskeyなどの新興SNSは、多くのサイトでまだシェアボタンが設置されていません。

特に、大手のお堅いニュースサイトはXとFacebookへのシェアボタンしかありません。

ハブられる新興SNSの図

Yahoo!ニュースでハブられる新興SNSの図*1

 

この場合、例えばAddToAnyなどの拡張機能を使えば、シェアボタンがないページでも共有が可能です。

しかし、これらの拡張機能はページのタイトルとURLから共有内容を決定するので、シェアボタンに設定されたテキストをそのまま共有したい場合に不便です。

例えば、AddToAnyでは診断メーカーの診断結果を取得できません。

シェアボタンから共有した場合。診断結果やハッシュタグが入力される。

シェアボタンから共有した場合。診断結果やハッシュタグが表示される

 

AddToAnyから共有した場合。ページタイトルが表示されてしまう

AddToAnyから共有した場合。ページタイトルが表示されてしまう

 

この問題を解決するため、Xのシェアボタンから他のSNSへ投稿できるブラウザ拡張機能ShareSwitch」をリリースしました!

https://chromewebstore.google.com/detail/shareswitch/llfcobjpmnnnccbofmkhlfdbefmceloi?hl=ja



仕様

    • XのIntent URLを開く(≒シェアボタンをクリックする)と、他のSNSの投稿ページへ自動的にリダイレクトします。
      • 現時点ではBluesky, mastodon.social, Misskey.ioへの共有のみに対応しています。

    • シェアボタンのURLに設定されているクエリパラメータのうち「text」「url」「hashtags」の値を半角スペースで結合して表示します。
      • 「via」など、他のパラメータは無視します。

オプション

以下のオプションを設定可能です。

確認ダイアログを開く(ON/OFF)

リダイレクト前に確認ダイアログを表示できます。
共有内容によってXに投稿するかどうかを選びたい人はONにしてください。
デフォルトではONです。

両方開く(ON/OFF)

Xとスイッチ先のSNSを両方開きます。
両方のSNSに投稿したい人はONにしてください。
デフォルトではOFFです。

技術的な話

Manifest V3対応

2022年1月17日以降、ChromeウェブストアではManifest V2拡張機能の新規受付が停止し、Manifest V3(以下MV3)への対応が必須となりました。

MV3では、webRequestBlockingの権限が使用できません。
これにより従来webRequest APIで行なっていたリクエストのブロッキングは機能しなくなり、代わりにdeclarativeNetRequest API(以下DNR)を使用する必要があります。

ShareSwitchでは、リダイレクト前にtext, url, hashtagsのクエリパラメータを結合します。
これはDNRでもregexSubstitutionで正規表現とキャプチャを駆使すればどうにか実装できそうなのですが、柔軟性が低くなかなか面倒です。

このような事情からShareSwitchではDNRを使用せず、代わりにwebNavigation APIでX Intent URLへの移動を検知した場合にタブを更新しています。

今後の予定

やりたいこと

インスタンスの選択

現在のバージョンでは、MastodonとMisskeyはもっとも人気のインスタンスであるmastodon.socialMisskey.ioのみ選択できます。
これらのインスタンス以外に所属しているユーザーのために、任意のインスタンスを選択できるようにします。

カスタムIntent URL機能

現在のバージョンでは、私があらかじめ指定したSNS以外へのリダイレクトはできません。

カスタムIntent URL機能では、TumblrやLinkedInなどのIntent URLをサポートしているSNSであれば、ユーザーがリダイレクト先を自由に設定できるようになります。

共有ボタン

シェアボタンが存在しないWebページでも、右上のアイコンから共有できるようにします。

FireFox対応

FireFoxに対応します。

できればやりたいこと

モバイル拡張機能への対応

実際のところ、SNSはパソコンよりもスマートフォンから使用することが圧倒的に多いです。

Firefox for AndroidSafari on iOSなど、一部スマートフォン向けブラウザには拡張機能を提供しているものがあります。

可能であれば、これらに対応したいです。

ただし、懸念点がいくつかあります。

    • 「技術的な話」に書きましたが、現在の実装ではDNRを使用していないため一度XのIntent URLにリクエストが飛びます。このままモバイル向けに移植してしまうとリダイレクト前にXのアプリが起動してしまうため、改善が必要です。
    • 仮にDNRを使用したとしても、リクエストを書き換えた場合にディープリンクが正しく動作してくれるのか不明です。
    • 現在iPhoneを所持しておらず、実機でのテストができません。

やらないこと

X以外の共有ボタンへの対応

当初はFacebookなど他のシェアボタンへの対応も検討していました。
しかし、他のシェアボタンを設置しているサイトでは多くの場合Xのシェアボタンも置いてあり、対応の必要性を感じなかったため見送りました。

ライセンス

コードはMIT Lisenceで公開しています。
バグ報告や改善要望はこちらのリポジトリのIssueからお願いします。

github.com

もしこの拡張機能が気に入った場合は、リポジトリにStarをいただけると大変励みになります!