ニコニコ動画の再生画面で登録済みマイリストを表示するGreaseMonkey

| | コメント(2)

「すでに登録されています」
このメッセージを見るたびに、なんだか情けなくなってきます。
そこで前もって登録されていることを知らせる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> ';
      }
    }
  }
})();

コメント(2)

wiz@_( (_´Д`)_ :

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

yuch :

登録することに価値があるからするんじゃないか

このブログ記事について

このページは、yuchが2008年1月14日 13:40に書いたブログ記事です。

ひとつ前のブログ記事は「仮想人格」です。

次のブログ記事は「寒いから外に出たくない」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 4.01