Hatena-TubeをPlaggerで - GM作った

index.html の書き換え云々、の部分は GM でやってしまえ。ということで。先頭の var base = の部分はご自分の環境に合わせて変えてください。
ただ、Jemplate.js (0.18に付属のもの) に以下の patch を当てないとループを回ってくれない。"No object to iterate" という例外が出る。
GM 内で動かす場合とそうでない場合で instanceOf の結果が違うのか?

@@ -625,6 +625,8 @@
                 object_keys[object_keys.length] = key;
             }
             this.object_keys = object_keys.sort();
+        } else {
+            this.object = object;
         }
     }
 }
// ==UserScript==
// @name          hatenaTubeHack
// @namespace     http://d.hatena.ne.jp/sfujiwara/
// @include       http://www.fladdict.net/app/hatenatube/*
// ==/UserScript==

(function() {

    var base = 'http://example.com/hatena-tube/';

    function hatenaTubeHack () {
        var mainDiv = document.getElementById('main');
        var div     = mainDiv.childNodes;
        for(var i=0; i < div.length; i++){
            if( div[i].className == 'video' ){
                mainDiv.removeChild(div[i]);
            }
        }
        var container = document.createElement('div');
        container.id  = 'video_container';
        mainDiv.appendChild(container);

        var container = document.getElementById('video_container');
        container.innerHTML = 'loading...';
        GM_xmlhttpRequest({
            method: 'GET',
            url: base + 'data.js',
            onload: function(response) {
                var data = unsafeWindow.JSON.parse( response.responseText );
                unsafeWindow.Jemplate.process('video.tmpl', data, '#video_container');
            }
        })
    }

    var head = document.getElementsByTagName('head')[0];
    var scj  = document.createElement('script');
    scj.src  = base + 'Jemplate.js';
    head.appendChild(scj);

    var sct  = document.createElement('script');
    sct.src  = base + 'video.tmpl.js';
    head.appendChild(sct);

    window.addEventListener("load", hatenaTubeHack, false);
})();