なんだか無視扱いのNetscape7に「このページに言及」ブックマークレットを作る

どうでもいいんだが、Netscape7ユーザーは無視されているのかね?

このページに言及 (Mozilla,Safariなど)

と書いてあるけど、なんかNetscape7だと動かないブックマークレットなんですが。反応しない。所詮、みんなFirefoxなんだな、きっと。

「ぷんぷん」と頭に来たのでブックマークレットの中身を見てみる。改行しているのはちょっと見やすくするため。

javascript:q=window.getSelection();
for(i=0;><window.frames.length;i++)
{q=window.frames[i].window.getSelection();if(q!='')break;}
location.href='http://d.hatena.ne.jp/refer?title='+encodeURI(document.title)+'&cite='+encodeURI(location.href)+'&body='+encodeURI(q);

なんだかよくわからないな〜(笑)。

まぁいいや、ということで次のように直した。というか途中を消した。

javascript:q=window.getSelection();
location.href='http://d.hatena.ne.jp/refer?title='+encodeURI(document.title)+'&cite='+encodeURI(location.href)+'&body='+encodeURI(q);

動くようになった。(おい)

でも、言及しようとしているページがはてなダイアリーの日記書き込みページになるので不満。

だったら「location.href」を「window.open」にしたらどうだ?と思ってやってみたら新しいウインドウの方にはてなダイアリーは来るけど、言及しようとしているページは何か変な文字が入って切り替わってしまう。

そこでLivedoor Blogの「Blogスクープ!」*1ブックマークレットを参考に修正しようと思った。

javascript:d=document;w=window;t='';
if(d.selection)
{t=d.selection.createRange().text;}
else
%20if(d.getSelection)
{t=d.getSelection();}
else
%20
if(w.getSelection)
{t=w.getSelection();}
%20format='%3Ca%20href=%22$url$%22%3E$title$%3C/a%3E%3Cblockquote%3E$body$%3C/blockquote%3E';
void(w.open('http://blog.livedoor.com/cms/article/add?bm=1'+'&b='+escape(t)+'&t='+escape(d.title)+'&l='+escape(d.location.href)+'&f='+escape(format)+'&tb=1&blog_id=*****',%20'_blank',%20''));

記述が無理矢理っぽいところもあるけど何か凄いな。なるほど、言及しようとしているページを変化させないようにするためには「void」を使えばいいと言うことね!

ちなみに「getSelection」はNetscapeだけにしか使えず、MS IneternetExplorerでは使えないみたいね。代わりに「document.selection」を使うのね。Livedoor Blogブックマークレットの先頭部分はどちらにも対応できるようにそういう記述だったわけだ。

document.selection

「現在選択されている文字列を示すオブジェクト」というのはありますが、getSelectionと同じ働きをするものはないようです。


そんな感じでできたNetscape7用の「このページに言及する」ブックマークレットはこんな感じ。もしかしたら「window.getSelection()」じゃなくて「document.getSelection()」の方が良いのかも。とりあえず「window.getSelection()」で良いと思いますが。

javascript:q=window.getSelection();
void(window.open('http://d.hatena.ne.jp/refer?title='+encodeURI(document.title)+'&cite='+encodeURI(location.href)+'&body='+encodeURI(q)));

*1:はてなダイアリーの「このページに言及」と同じです