Auto hide next up card for Amazon Prime Video v2.6.0 リリース

2025年3月24日JavaScriptchat_bubble2

Amazon Prime VideoのNext up等の邪魔な要素を非表示にする「Auto hide next up card for Amazon Prime Video v2.6.0」をリリースしました。

追記 2025/03/24

v2.6.0にて問題が発生したため、v2.6.0.1としてv2.5.2にロールバックしました。
問題の詳細はこの記事のコメント欄をご確認ください。

v2.5.2からの変更点

  • 通信を監視してNext upの表示フラグを無効化する機能を追加

3月22日辺りからプライムビデオにて「自動再生がオフの場合に非表示ボタン無しで自動再生のタイマーが進み、次の動画に遷移してしまう」という謎な挙動が追加されました。正直バグっぽい挙動ですが、v2.6.0ではその挙動に対処するための機能を追加しました。

追記
プライムビデオ側のバグだったのか、23日時点では従来の挙動に戻っているようです。

少し前に以下の記事でも軽く言及しましたが、プライムビデオではNext upの表示フラグは常にtrueの状態でjsonで扱われています。再生開始などのタイミングで必要なデータがサーバーからjsonで取得されるようになっています。

通信を監視してNext upの表示フラグをfalseにすることでNext upを無効化できることは確認済みだったので、v2.6.0では先述の記事のユーザースクリプトと同じような実装を行いました。自動再生のタイマーは非表示ボタンをクリックすることでしか解除できず、DOM上の要素の非表示や削除では裏で動作しているタイマーは解除されません。非表示ボタンが表示されない以上は通信の監視・改ざんという手段を取ることしか思いつかなかったのでそのような対処方法を取りました。

今回追加した機能はデフォルトで有効にしています。「通信の監視」「CSSでdisplay:none」「非表示ボタンの自動クリック」この3つの方法でNext upに対処するという実装になっており、通信の監視を無効にすることも可能です。

先述の記事の最後でも言及していますが、プライムビデオは通信周りの仕様(URLやjsonの構造)を実験的なのか何かしらの条件があるのか、突然変更してくる可能性があります。v2.6.0の実装は私の環境で今現在期待通りに機能している実装という感じなので、全てのアカウント・環境で機能するかは分かりません。私の環境で確認した限りでは、今回の挙動は自動再生をオフにすることがトリガーになっている感じだったので、自動再生をオフにしている場合かつv2.6.0でも対処できないようなら自動再生をオンにしてみると良いかもしれません。

なお通信の監視は動画プレイヤーの要素が存在する場合にのみ行うようにしています。プライムビデオのページでのみ機能するようになっており、通常のAmazonの買い物などでは監視の処理は実行されないはずです。


以下は拡張機能やユーザースクリプトにおけるxhookの挙動についてのメモです。興味のある方以外は読まなくても良いと思います。

通信の監視・改ざんにはxhookを使用しましたが、ChromeでもFirefoxでも拡張機能の場合、xhookを別のファイルとして同梱してそれを実行させる形ではmanifest.jsonにてコンテンツスクリプトのworldの設定をISOLATEDではなくMAINにしないと通信の監視が機能しませんでした(xhookという名前のオブジェクトは認識していてもなぜかxhook.after()が無反応になった)。

プライムビデオの挙動に早急に対処したかったのでとりあえずはこの状態でリリースしましたが、worldをMAINにすることでxhookオブジェクトがグローバルに出ている状態になってしまっています。問題にはならないとは思いますが、あまり気持ちの良い物でもないので、これは今後拡張機能のビルド方法の見直しなどで対処したいです。Auto hide next up cardはユーザースクリプト版と拡張機能版とでコードの共通化という縛りプレイじみたことをやっているので、そこに影響の出ない形で対処する必要があるんですよね。

またこちらは対処済みですが、ユーザースクリプトにおいて、xhookをユーザースクリプトのヘッダーの@requireで宣言する場合、@grantをnoneにしていないとxhook.after()が無反応になるということを確認しました。私はユーザースクリプトマネージャーとしてTampermonkeyを使用しており、この件についてはマネージャー側の一種の制限だと思っています。Tampermonkeyのドキュメントを読んでもよく分からなかったのですが、v2.6.0時点ではユーザースクリプト用の関数は使用していないので@grantがnoneでも問題にはなっていません。

xhookと合わせてユーザースクリプト用の関数を使用する場合は「Amazon Prime Video 1080p」の実装のようにxhookのjsのURLを設定したscriptタグをDOMに追加するという実装にすれば良いかもしれません。私が確認した限りでは、この場合には@grantをnoneにする必要はありませんでした。

ブラウザ拡張機能

藤乃音りょう