- 2008年3月18日 12:21
- Greasemonkey | おもろい | お役立ち | プログラミング
「ぼくが、一番ニコ動をうまく使えるんだーーー!ずぎゅーーん」
「・・・ばかな、あんどれ」
なんてことを言われたどうかはわかりませんが、Youtube用のGreasemonkeyにYouTube動画を同一画面上に開いてリサイズできるGreasemonkey|WEBマーケティングブログというのがありまして、便利だったのでニコニコ動画用につくってみました。
「マイリスト」「ランキング」「タグ検索」「キーワード検索」等の動画一覧の動画リンク横にあるボタンをクリックすると画面遷移することなしに動画をポップアップで起動できるようになります。
まるで先読みの・・・のような操作感!(笑)
大量の動画をポップアップすることもできますが、ぶっちゃげ私のマシンではCPUの性能が追いつかない(まさにニュータイプwww)のであまり試してません。ま、サーバーに優しくね^^(試したのは今のところ同時6個くらいまで・・・爆発しそうでした。)
[簡単な使い方]
1.インストール
Greasemonkeyと下のユーザースクリプトをインストールしてください。都合上スクリプトが2つになってます。nicomultipopdragresize.user.jsだけでも動きますが、その場合、自動モード(後述)のみになります。nicomultipopdragresize.user.js
nicomultipopdragresizepa.user.js
2.利用できる画面
ニコニコ動画の一覧(例タグ検索 演奏してみた‐ニコニコ動画(SP1))を開きます。動画のリンク横に下のイメージのようなポップアップボタンがあるので押してください。小さなウィンドウ(ポップアップ画面)が起動して動画が見れます。3.ポップアップ画面について
閉じたいときは画面左上の×ボタンで閉じてください。リサイズは、下のイメージのように画面右下の端をドラッグして下さい。画面上のドラッグバーをドラッグ&ドロップして画面移動もできます。4.ショートカットキー
i :初期化 ポップアップ画面のサイズ・位置・スクロールの位置(縦)を初期化します。 r :リロード
Friefox拡張(※)によっては、動的にリンクが増えたりするものもあるので、更新されたリンクに対してポップアップボタンを追加します。

(※)試したのは私の使っている拡張マイリストとAutoPagerize(ウノウラボ Unoh Labs: Webブラウジングを快適にするAutoPagerize)です。いつもお世話になりまくってます。
m :ポップアップ画面内の縦スクロール位置の設定方法の切り替え
OKならマニュアルモード→一番最後に移動した縦スクロール位置を記憶。
キャンセルなら自動調整モード(初期値)→動画が見える位置まで自動スクロール。
d :ポップアップ画面を全て閉じる
ポップアップが増えすぎたり、画面の外に移動してしまってカオスな状況になった人のために。
5.他のユーザースクリプトとのコンフリクト(衝突)について
ユーザースクリプト(以下US)の宿命(?)で他のUSに影響を与えることがあります。 例えばポップアップの画面内で拡張マイリストの登録をすると動画のIDが正しく取れません。原因は、ポップアップ先の画面で特定の場所にジャンプする都合上、URLの後に~#flvplayer_container、#flvplayer_container_mをつけているからです。(動画のIDを抜き出す処理に影響したりします。)
対応(1)もっともシンプル
ポップアップ先の画面では他のUSを使わない。
ポップアップ画面内でいろんなことをやった場合どうなるかはあんまりテストしてません。
動画をみるだけにしておいたほうがよいかも。
対応(2)USなんとなくわかります人向け
ポップアップ先の画面で使われている他のUSを編集。以下のURLを除外URLにする。
編集したUSがポップアップ時のみ無効になります。
http://www.nicovideo.jp/watch*#flvplayer_container
http://www.nicovideo.jp/watch*#flvplayer_container_m
対応(3)USカスタマイズすればいんじゃない?人向け
私はポップアップ先でも拡張マイリスト使いたい(ワガママなやつ^^;)ので以下のようにしました。
nicovideoadditionalmylis.user.js
function getVideoInfo()の1019行あたり
//var m = w.location.href.match(/^http:\/\/.*?\.nicovideo\.jp\/watch\/([^\/]+)/);
var m = w.location.href.match(/^http:\/\/.*?\.nicovideo\.jp\/watch\/([a-z0-9]+)/);
6.ちょっと改善
・ポップアップ画面を閉じるときに位置とサイズを記憶しますので初期化するときは全画面閉じてないとあまり意味がなかったりします。
・友人にテストしてもらったら文字入力時にショートカットが有効になるのがウザイという助言(グッジョブ!ありがとう^^)をもらったので「shortcuts.js」(すばらしいライブラリです。)を取り込んで無効にしました。
7.プログラム的なところ
・スクリプトが2つになったのが残念。
開いたポップアップ(iframeで作成)のスクロールバーが親から制御できなかった。結果、ポップアップ先で動くスクリプトを別に作成。iframeはじめてまともにつかった(w)のですが理解し切れてないようです。
wrappedJSObjectでできそうな気がしたんですけどだめでした。
参考サイト
304 - narucissus is Not Modified: Greasemonkeyで遊ぶ(その1)
XPCNativeWrapper - MDC
・元ソースから改変しまくったので無駄が多い。
直せたら総リファクタしたいくらい。ただ、ユーザースクリプトの賞味期限を考えるとこのままでもいいかなーと考えたりもします。
おまけ
はてなスターが沢山ついているエントリーがうらやますぃーので少しタイトルと序文をいい感じに工夫してみましたウヒヒw参考サイト
トレビアンな文章が書けるテクニック! - livedoor ディレクター Blog
関連エントリ
Andre's garden: livedoor Readerのフィードをレートごとに既読にするGreasemonkey
追記(3/31)
レベルアップしました。Andre's garden - 他のサイトでもニコニコ動画をポップアップできるようになりました。



