先日公開したChrome 拡張機能「YouTube Looper」、その後アレコレ改善点を考えたお話。
今回の機能は、動画全体を繰り返し再生+最初と最後の邪魔な部分をカット、という考え方ですが、やっぱどこでも好きな箇所を部分リピートくらいはできないとなぁ、ということで考えてみました。
部分リピートするには動画の長さを取得することがマストになります。動画の長さを取得するには、YouTubeのページに埋め込んだスクリプトから、document.getElementById('movie_player').getDuration(); で出来ますが、この結果をどうにかしてコンテンツスクリプト側に伝える必要があります、この方法については以前のエントリーで少し触れました、昔の苦労がいい感じに役に立ってくれました。訳のわからない関数を使うので好きになれませんが、ページで実行した関数の結果をコンテンツスクリプト側で受け取れます。
長さを取得できればこっちのものです、コンテンツスクリプトとポップアップページ間のメッセージのやり取りは定番のやり方があります。この関数↓
chrome.tabs.sendMessage();
これでポップアップ側で動画の長さを反映させれば好きな秒数を指定して部分リピートが可能になります。ところが...
部分リピート機能は普通特定の動画のみに適応する機能で、使いまわしをしません。私が当初考えた機能はわりと汎用性のあるものとして作ったので、設定をわけないといけなくなりました。
なんとなくめんどくさくなって、作業中断(別にそんな大変じゃないんですが)。
あと発見したエラー↓
・別のタブで作業している時はループが効かない(うわぁ致命的ぃ)。
・ループを効かせた状態で動画を試聴し、つべのメインページとか履歴のページに飛ぶと...なんと動画の音だけが再生されるという謎のバグが...つべの仕様で履歴のページにもプレイヤーが存在するんですかね。