いろんなサイトをhAtomに対応させるGreasemonkey
// ==UserScript== // @name microformats // @namespace http://d.hatena.ne.jp/javascripter/ // @include http://* // ==/UserScript== function getSITEINFO(){ if(!GM_getValue('cache')){ GM_xmlhttpRequest({ method:'GET', url:'http://wedata.net/databases/AutoPagerize/items.json', onload:function(res){GM_setValue('cache',res.responseText)} }); } return eval(GM_getValue('cache')); } function getMatchData(){ var data=null; getSITEINFO().some( function(site){ if(location.href.search(site.data.url)!=-1){ data=site.data; return true; } }); return data; } var data=getMatchData(); if(!data)return; unsafeWindow.console.log(data.pageElement); $x(data.pageElement).forEach( function(element){ addClassName(element,'hentry'); unsafeWindow.console.log(element) } ); $x(data.nextLink).forEach( function(element){ addRelName(element,'next'); } ); function addClassName(element,className){ var list=element.className.split(' '); if(list.indexOf(className)==-1){ list.push(className); element.className=list.join(' '); } } function addRelName(element,relName){ var list=element.rel.toLowerCase().split(' '); if(list.indexOf(relName.toLowerCase())==-1){ list.push(relName); element.rel=list.join(' '); } } function $x(xpath,context){ var x=document.evaluate(xpath,context||document,null,7,null),r=new Array; for(var i=0;i<x.snapshotLength;i++)r.push(x.snapshotItem(i)); return r; }
このようなものを作ったのだけれども、非同期の処理がよく分からなくなったのでイマイチ。