« ZAKZAKのパラパラページbookmar... Main 刑事コロンボ… »

ZAKZAKのパラパラページbookmarkletの続き

前回より

Firefoxでは画像のみを表示している場合のinnerHTMLへの代入がうまくいかず、<html><body> &lt; html &gt; &lt; body &gt;… のようになってしまう(バグ?)。しょうがないので、appendChildを使うことにした。ということで、連番画像へのリンク生成用bookmarklet(試すのはこのあたりで…)

javascript:(zimg=function(n){d=document;if(n>=100){exit}l=d.location.toString();if(!l.match(/[0-9]+_b.jpg/)){alert(‘%E9%9D%9E%E5%AF%BE%E5%BF%9C%E3%83%9A%E3%83%BC%E3%82%B8%E3%81%A7%E3%81%99’);exit;}b=l.replace(/[0-9][0-9]_b.jpg$/,”);s=n;if(n<10){s=’0’+n};with(i=new%20Image()){src=b+s+”_b.jpg”;border=0}body=d.body;div=d.createElement(‘div’);div.style.visibility=’hidden’;div.appendChild(d.createTextNode(n));div.appendChild(d.createElement(‘br’));div.appendChild(a=d.createElement(‘a’));with(a){href=’javascript:zimg(‘+(n+1)+’)’;appendChild(i)};div.appendChild(d.createElement(‘br’));div.appendChild(z=d.createElement(‘a’));site=l.replace(/^(http:(\/\/)?[^\/]+\/).*$/,’$1′);z.href=site;z.appendChild(d.createTextNode(site));waitimg=function(){if(i.complete){with(body){while(firstChild!=null){removeChild(firstChild)}appendChild(div)}div.style.visibility=’visible’}else{setTimeout(function(){waitimg()},10)}};waitimg()})(1)

innerHTMLが使えないので、要素の削除もfirstChildをひとずつつremoveChild()している。また、with(document){open();writeln(…);close()}も試したが、この場合は文書のclose()が悪さをするようで、次回にはlocationが持ち越せなかった。

対象外のページでの警告表示と画像をImageオブジェクトで先読みして、その読み込み待ちのsetTimeout処理も組み込んだ。画像の読み込みエラー時のonerrorで連番の終了検出をしようとしたが、Firefoxではこの属性はないらしい(ちらっと試した限りではなぜかIEでもうまく動作しなかったが)。(自動でパラパラめくるのも試してみたが、ここはやはり手動でクリックするほうがいいようだ)。

追記:
サムネイル画像の場合も強引に_b.jpgを追加して表示を試してみるようにしてみた。

ということで、新:連番画像へのリンク生成用bookmarklet。変更分は以下の感じ。

if(!l.match(/.jpg$/)){alert(mess);exit}l=l.replace(/.jpg$/,”_b.jpg”);

追記:
サムネイルからのリンクを生成できるようになったので、さらにその画像を含んでいるページURLの場合に、画像タグを探索して表示を開始するようにしてみた。→新々:連番画像へのリンク生成用bookmarklet。切り分けの追加箇所は以下のとおり。

if(l.match(/\.html?/)){base=l.replace(/\/[^\/]*$/,’/’);imgs=d.getElementsByTagName(‘img’);for(i in imgs){s=imgs[i].src;if(s.match(base)){l=s;break}}}

画像ファイル名末に_bとbの2種類があるんだが、これらも試して表示するようにしてみた。

↑うーん。現在このbookmarkletは1230文字程度あるのだが、Firefoxで「リンクのURLをコピー」やリンクをドラッグしてブックマークすると冒頭420文字程度しかコピーされん。そういうものなのか?

これではブックマークが使えないので、全文を示しておこう。

javascript:(zimg=function(n,p){if(!p){p=’_b’}d=document;l=d.location.toString();if(l.match(/\.html?/)){base=l.replace(/\/[^\/]*$/,’/’);imgs=d.getElementsByTagName(‘img’);for(i%20in%20imgs){s=imgs[i].src;if(s.match(base)){l=s;break}}}mess=’%E9%9D%9E%E5%AF%BE%E5%BF%9C%E3%83%9A%E3%83%BC%E3%82%B8%E3%81%A7%E3%81%99′;if(!l.match(new%20RegExp(‘[0-9]’+p+’.jpg’))){if(!l.match(/.jpg$/)){alert(mess);exit}l=l.replace(/.jpg$/,p+”.jpg”);}b=l.replace(/[0-9][0-9]_?b.jpg$/,”);s=n;if(n<10){s='0'+n};with(i=new%20Image()){src=b+s+p+".jpg";border=0;onerror=function(){if(p.match(/_b/)){zimg(n,'b')}else{alert(mess)}}}body=d.body;div=d.createElement('div');div.style.visibility='hidden';div.appendChild(d.createTextNode(n));div.appendChild(d.createElement('br'));div.appendChild(a=d.createElement('a'));with(a){href='javascript:zimg('+(n+1)+',\''+p+'\')';appendChild(i)};div.appendChild(d.createElement('br'));div.appendChild(z=d.createElement('a'));site=l.replace(/^(http:(\/\/)?[^\/]+\/).*$/,'$1');z.href=site;z.appendChild(d.createTextNode(site));waitimg=function(){if(i.complete){with(body){while(firstChild!=null){removeChild(firstChild)}appendChild(div)}div.style.visibility='visible'}else{setTimeout(function(){waitimg()},10)}};waitimg()})(1)

Leave a comment

Your comment