ブラウザに先読み機能を付けてみる(2)

前回の記事だと別のドメインのページの内容にアクセスできなかった。
これを解決するためにとりあえず考えたのが

1. XMLHttpRequest を利用する
2. Bookmarklet にする

という方法。

1 の方法はどうもサーバーとの通信がネックになりそうで
いやだったんだけど、この方法が一番いろいろできそう。

その点、2 のBookmarkletにする方法はサーバーとの通信はないものの
ページを読み込むごとに Bookmarklet を実行しないといけない。
そんな面倒なことしれられるか!!

と思いつつも、CGI 動かせるサーバーのアカウントを持っていないんで
とりあえず 2 の方法を試してみた。
やることは、
・隠し iframe をページの最後に作る
・クリックイベントを取得して、ページを隠し iframe の方に読み込む
だけ。

だから欠点もたくさんあって、

1. 一度に 1 ページずつしか読み込めない
これは隠し iframe を 1 つしか作っていないから。

2. 先読みしたページが 301 リダイレクトや 302 リダイレクトすると
ページ全体が移動してしまう
これはブラウザ側の挙動なんでなかなか対応できない。
レスポンスコード見るという手もあるけど、
Bookmarklet の文字数制限に引っかかる…。

Bookmarklet の内容は以下のとおり

i=(d=document).createElement('iframe');
i.id='hif';
i.style.display="none";
(b=d.getElementsByTagName('body')[0]).appendChild(i);
if(b.addEventListener)
b.addEventListener('click',pr, true);
else
b.attachEvent('onclick',pr);

function pr(e){
if(e.ctrlKey){
if(document.all)
u=e.srcElement.href;
else
u=e.target.href;

document.getElementById('hif').src =u;
return false;
}
}

focus();


body 要素に iframe 要素を追加して
さらに body 要素にイベントハンドラを追加してるだけ。

bookmarklet
Ctrl+クリックで先読みします。

文字数制限のせいであまり処理ができてないけど
外部スクリプトファイルを読み込むようにすれば
もう少し高機能にできるかも。

だけど、いかんせん毎回実行しないといけないというのが
面倒…。

アカウント取れたら XMLHttpRequest も試してみよう。
posted by oi at 2006年04月13日 23:13 | Comment(0) | TrackBack(0) | JavaScript
この記事へのコメント

この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。