はじめに
僕は、TwitterのシェアボタンからMisskeyへシェアすることができる拡張機能、Twishare to Misskey(以下Twishare)を開発しております。それにあたってひっかかった問題について書きたいと思います。
一つだけ断らせていただきます。僕はネットワークに関してそこまで詳しくないため、この記事内でも不確定な表現や不確実な表現があるかと思います。今後頑張って勉強していくので、温かい目で見ていただくとともに何か間違いがあればコメントやTwitter(頑なにXとは呼ばない)などで指摘していただけると嬉しいです。また、僕自身はおかしいと感じましたが、もしかしたらこれは専門の方々の中では常套手段なのかもしれないので、その場合も教えていただけたら嬉しいです。
記事本文
経緯
皆さんご存じの通り、2024年5月にとうとうtwitter.comがx.comにリダイレクトされることとなりました。やめてほしいです。俺の魂は永遠にTwitterにある。(だまr
まあ決まっちゃったことは仕方ないので、Twishareを更新していきたいと思います。
リダイレクトの仕様を調べる
Twishareでは、twitter.com/intent/tweet
に遷移したらMisskeyにシェアするかどうか確認する画面を出すようにしていました。(window.confirm
を使ってUIを自作せずに済ましている。実際のコード)
このファイルを走らせるかどうかはmanifest.jsonのcontent_scriptsで指定しているのですが、そのURLを変更すればx.com対応ができそうです。
実験しましょう。Twishareを無効化したブラウザで、https://twitter.com/intent/tweet にアクセスしてみましょう。アドレスバーを見ていると、
twitter.com/intent/tweet
-> x.com/intent/tweet
-> x.com/intent/post
と遷移していることがわかります。
実装してみる
詳しい仕様はわからないですが、この仕様でtwitter.com/intent/tweet
とmanifest.jsonで指定しても動作しないようなので、最終的に遷移するx.com/intent/post
を指定してあげればよさそうです。はい。
おかしい
以上のように実装してもなんか動かない。
詳しくリダイレクトを観察します。
リダイレクトとかまじで触ったこともなかった分野なので、調べながら見てみます。
リダイレクトはサーバーサイドとクライアントサイドがあるらしい。サーバーサイドの場合はステータスコードが30xになるらしい。
以下はURLがx.com/intent/post
に変わったあたりまでのスクショです。下のほうはたぶん画面描画に関連する取得っぽいのであんま関係なさそうですね。
なってますね。
...ところで、ステータスコード302は一時的な移動らしい。もしかしたらtwitter.comに戻ることがあるのかも?コロコロ変えるのやめてほしいなぁ
その後、x.com/intent/tweet
を取得してますね。
...ん??/intent/post
は取得していない???
仮説
x.com/intent/tweet
と /intent/post
は実体は同じで、前者を読み込んでからアドレスバーだけ何らかで書き換えてるのかもしれない???
そんなことできるのか?
この場合、x.com/intent/post
にリクエストを送ったという事実はないので、(それはデベロッパーツールを見てもわかる)いくらmanifest.jsonにcontent_scripts指定を書いても実行されませんね。
ということでmanifest.jsonにはx.com/intent/tweet
と記述します。
検証
できた。
さいごに
なんでcontent_scriptsに twitter.com/intent/tweet
と x.com/intent/tweet
と x.com/intent/post
3つ指定しないのか、と聞かれるかもしれませんが、これするとリダイレクトが実行されるたびに確認画面が出てくるので普通にUXが悪いんです。
Misskeyユーザーの方、ぜひ使ってね。