ニコニコ動画の再生画面で登録済みマイリストを表示するGreaseMonkey
「すでに登録されています」
このメッセージを見るたびに、なんだか情けなくなってきます。
そこで前もって登録されていることを知らせるGreaseMonkeyスクリプトを作りました。
GM_xmlhttpRequestでマイリストページを非同期に読み込んで、
再生している動画が含まれていないかを検索します。
私はAjaxとかも実際に作ったことは1回もなかったので、
最初戸惑ったのが、どうやってパラメータをコールバック関数に渡すか、というところでした。
これこそクロージャの出番じゃないかということに気付くのにちょっと時間がかかってしまいました。
関数を返す関数を作って、上位関数の引数を下位関数に引き渡せば、
関数生成時に動的にパラメータを束縛できるわけですね。
// ==UserScript==
// @name 登録済みマイリストを表示
// @namespace http://eclipse.cspc.jp
// @include http://www.nicovideo.jp/watch/*
// ==/UserScript==
(new function() {
var sm = location.href.match(/(sm[0-9]+)/)[1];
var es = document.getElementById('mylist_add_group_id').getElementsByTagName('option');
for (i = 0; i < es.length; i ++) {
GM_xmlhttpRequest({
method: 'GET',
url: 'http://www.nicovideo.jp/mylist/' + es[i].value,
onload: onload_generator(es[i].innerHTML, es[i].value, sm)
});
}
function onload_generator(mylist_name, mylist_code, sm) {
return function(req) {
var e = document.getElementById('mylist_add_status');
if (req.responseText.indexOf('watch/'+sm) != -1) {
if (e.innerHTML == '')
e.innerHTML = '登録済み→'
e.innerHTML += ' <a href="mylist/' + mylist_code + '">' + mylist_name + '</a> ';
}
}
}
})();

>このメッセージを見るたびに、なんだか情けなくなってきます。
見るのがいやなら登録しなければいいじゃない。(゚∀゚)うはっ、天才ktkr
登録することに価値があるからするんじゃないか