Auto hide next up card for Amazon Prime Video v2.6.0 リリース
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にする必要はありませんでした。
ディスカッション
コメント一覧
いつも大変お世話になっております。
今回の対策ありがとうございました。
元に戻ったと思ったのですが、どうやらこのアプリに対して?の対策が施されたようです。
始まりから10~20秒間、画質が悪くなる症状が出るようになりました。
アプリを削除すると綺麗なままになります。
見れるので問題ないのですが、気分のいいものではありません。
イタチごっこのような状態で大変恐縮なのですが、対応のご検討をいただけると幸いです。
同様の問題を確認しました。
v2.6.0で通信の監視のためにxhookというサードパーティーのツールを導入したのですが、それが有効になっているとプライムビデオの動画のプリロード(先読み)で最低画質の物を取得してしまうようです。結果として再生開始から少しの間は最低画質で再生されるようです。
おそらくxhookの仕組み自体がプライムビデオのコンテンツ保護的な対策に引っかかってしまった感じだと思います。
取り急ぎv2.6.0.1として中身はv2.5.2の状態でロールバックしました。
画質についてですが、強制的に高画質で再生するというのは「Amazon Prime Video 1080p」という拡張機能で実現されています。
https://github.com/ryo-fujinone/amazon-prime-video-1080p
Auto hide next up cardの次のバージョンでは、デフォルトで無効な状態で「通信の監視」「強制的な高画質再生」をセットで実装するのが良さそうですね…