素人がプログラミングを勉強していたブログ

プログラミング、セキュリティ、英語、Webなどのブログ since 2008

連絡先: すかいぷ:javascripter_  か javascripter あっと tsukkun.net skypeのほうがいいです

wedataの情報を元にページのコンテンツ部をリロードするGreasemonkey

AutoPagerizeのjsonを使ってAjaxな感じにオートリロードする。
適用するサイトは手動で追加。はてなハイクTwitterで一応確認。

このスクリプトを入れると左上にアイコンが出るから、オートリロードしたくなったらクリック。とめたくなったらまたクリック。トグルします。

// ==UserScript==
// @name           dynamicReload
// @namespace      http://d.hatena.ne.jp/javascripter/ 
// @description    コンテンツ部分のみを動的にリロードします。
// @include        http://*
// ==/UserScript==

const INTERVAL=30000;//何秒経ったらリロードするか

var getSiteInfo=function(){
		    if(!GM_getValue('siteinfo')){
			    GM_xmlhttpRequest({
method:'GET',
url:'http://wedata.net/databases/AutoPagerize.items.json',
onload:function(res){GM_setValue('siteinfo',res.responseText)}
});
}
return eval(GM_getValue('siteinfo'));
}
var getPageElementXPath=function(siteinfo){
	var pageElementXPath;
        var isMatch=getSiteInfo().some(
	function(site){
	if(location.href.match(site['data']['url'])){
	pageElementXPath=site['data']['pageElement'];
	return true;
	}
	});
return pageElementXPath;
	}
var replaceElement=function(){
GM_xmlhttpRequest(
	{
method:'GET',
url:location.href,
onload:function(res){
var pageElements=document.evaluate(pageElementXPath,document,null,7,null);

var tmp=document.createElement('div');
tmp.innerHTML=res.responseText;
var newPageElements=document.evaluate(pageElementXPath,tmp,null,7,null);

for(var i=0,length=Math.min(pageElements.snapshotLength,newPageElements.snapshotLength);i<length;i++){
	var pageElement=pageElements.snapshotItem(i);
	var newPageElement=newPageElements.snapshotItem(i);
	pageElement.parentNode.replaceChild(newPageElement,pageElement);
	}
	}
	});
	}
var setTimer=function(){
return setInterval(replaceElement,INTERVAL);
}
var clearTimer=function(timer){
	clearInterval(timer)
}
var addIcon=function(){
	var icon=document.createElement('div');
	icon.id='dynamicReload_icon';
	with(icon.style){
		color='#808080';
		backgroundColor='#d8d0c8';
		position='fixed';
		top='5px';
		left='5px';
		zIndex=2000;
		border='2px outset #ccc';
	}
	icon.textContent='OFF';
	this.flag=false;
	icon.addEventListener('click',
			function(){
			this.flag=!this.flag;
			if(this.flag){
			icon.textContent='ON';
			icon.style.color='#402840';
			this.timer=setTimer();
			}else{
			icon.textContent='OFF';
			icon.style.color='#808080';
			clearTimer(this.timer);
			}
			},false)
	document.body.appendChild(icon);
}

var pageElementXPath=getPageElementXPath();
if(!pageElementXPath)return;
addIcon();

まあまあ使えるとは思う。