選択範囲を自分の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 のほうがいいかも。

javascript でレイトレ・・・すっげ

http://blog.xsive.co.nz/archives/210

すっげ。

C言語(Pascalだったか?)でレイトレやる本どこいったかな・・・。

AS3 でバンプマッピング(http://www.unitzeroone.com/papervision/paperPlanet/Main.html) (via fladdict.net blog: flashでバンプマッピングや環境マッピング) 普通に動いたりするし、すげー人はすげーなぁ・・・。

ライブラリも疑え

ブラウザのバグ?とか思ってたエラーが、ライブラリ(scriptaculous)のバージョン変えたら直った。

scriptaculous 1.6.5 + Opera 9.10において、slider.js でエラーが出るので悩んでいたんです。で、一緒に入ってるテストコードを動かしてみようとしたら、動かないんでやんの(汗。そこでつまずいちゃぁ、こっちでどうやったって動きませんわね。

対象ブラウザで本家テストコードくらい動かせ>俺

IE で、Ajax.request を確認するときは、サーバー上でやる。

flash でもそうだけど、サーバーにあげると動いてローカルだと動かないってのは混乱しますね~。セキュリティ上仕方ないというのはわかるのだけど。

とくに学習初期の段階では、ノウハウがないから原因の切り分けができないんです。しかも Firefox だと動いちまうもんだから、あってるのか間違ってるのかもわからないし。余裕があるときにはいいけど、テンパってるときは苦戦しそう。

ってか、DOMの勉強もせんといかんしなぁ。

ほんとは flash でやったほうが楽なんだけど、今回の仕事は html + javascrip メインでやったほうが使いやすくなると思うんだよね~。がんばろ。

javascript でディレイするには setTimeout?

忘れそうなのでメモ。setTimeout / clearTimeout。

tableの行にonmouseover / onmouseout を仕込んで、マウスがのったらアクションを起こさせたかったのだけど、td の中にある画像にマウスが乗ったときにも、mouseover/mouseout イベントが発生してしまうようです。パラパラっと切り替わってしまっていやなので、変化させるエフェクトにディレイを入れたいなと。

ということで、onmouseover イベントがきてもすぐに変更せず、ちょっと待ってから変更を開始するようにしたい。こんなときは setTimeout なんかな? いろいろなシチュエーションを考えないといけないのでめんどくさいけど、こういうのは flash で慣れてるし、なんとかなった。

今のところ onmouseover で動かすのが最良かどうかはわからないのだけど、検討するサンプルがほしいんでね