選択範囲を自分のcssで表示するbookmarkletのテスト。

web 見てて、読みたいんだけど表示が気に食わないとき、なんとかならんもんかと思って作ってみました。ネットで見つけたコードをつぎはぎしただけなので作ったとは言わないか・・・。今のところ camino でのみテスト。Firefox をメインでは使っていないので Greasemonkey も使えないし、がっつり読みたいときだけ使うので bookmarklet で。

ようは、選択範囲のhtmlをコピーし div class=”myview” に入れ、既存の CSS を無効にし、自分の CSS ファイルを読み込み(ローカル不可)、body の中身を div class=”myview” に置き換えるだけ。選択範囲の html が不完全だったときの処理はブラウザ依存です。

戻すときの処理はなんも考えてないので、変更前のデザインに戻すにはページのリロードをしないといけないんですが。


(function() {
var s = window.getSelection();
if( !s || !s.rangeCount)
	return;

var f = 'http://localhost/myview.css';

var cr = document.createElement("div");
cr.className = 'myview';

var i,l;

for(i=0, l = s.rangeCount; i < l; ++i){
	cr.appendChild(s.getRangeAt(i).cloneContents());
}

for(i = 0, l = document.styleSheets.length; i < l; ++i){
	document.styleSheets.item(i).disabled = true;
}


var link = document.createElement("link");
link.setAttribute("rel", "stylesheet");
link.setAttribute("href", f);
link.setAttribute("type", "text/css");
document.getElementsByTagName('head')[0].appendChild(link);

document.body.innerHTML = '';
document.body.appendChild(cr);
})()

これに加え、適当な css をローカルサーバーなどに置けば終了。

ページ見てて、うるさいデザインだったり、1行の文字数が多すぎたり少なすぎたり、字がちっこすぎたり、行間が気に入らなかったり、そういうときに使ってます。ここんとこ、ディスプレイから離れてブラウズすることが多くなり、それに伴って大きめのフォントで表示させることが多いので、そうやってデザイン崩れちゃったときにも有効かなと。

ま、一時的に読みたい部分にフォーカスして読むためだけのものです。毎回絶対っていう類のものは、proxy なり ブラウザなり、もちょっと上流でなんとかするほうがいいかと。

今思ったが、class よりも id のほうがいいかも。