の形で呼ぶ。
//
// anchor_idはフレームを使う場合最低限各フレームごとに設定。お互い他のフレームを書換えたときにへんな干渉をさけるため。
// その他ページの種別毎などで変えてもよいが、あまり小分けにするとcookieが増える。
// 同じanchor_idで保存されるcookieは1セットのみ。でも単独ページ表示のサイトなら概ねこれで充分。
anchor_id = "anc_main";
noanchor = false; // bodyにanchorをしかけたときなど場合によって一時無効にするためのフラグ。
// アンカーの記憶。
function anchor_save(object_id, page_id) {
if(noanchor) { anchor_erase(); return; }
get_scroll();
setcookie(anchor_id+"_pid", page_id, 0);
setcookie(anchor_id+"_st", scroll_top, 0);
setcookie(anchor_id+"_sl", scroll_left, 0);
if(object_id) {
object_top = scroll_top + get_object_top(object_id);
object_left = scroll_left + get_object_left(object_id);
setcookie(anchor_id+"_oid", object_id, 0);
setcookie(anchor_id+"_ot", object_top, 0);
setcookie(anchor_id+"_ol", object_left, 0);
} else {
setcookie(anchor_id+"_oid", "", -1);
setcookie(anchor_id+"_ot", "", -1);
setcookie(anchor_id+"_ol", "", -1);
}
}
// アンカーの適用。
function anchor_apply(page_id) {
if((saved_page_id = getcookie(anchor_id+"_pid")) && page_id != saved_page_id) { return; }
get_scroll();
if((anchor_st = getcookie(anchor_id+"_st")) != "" && (anchor_sl = getcookie(anchor_id+"_sl")) != "") {
anchor_st = parseInt(anchor_st);
anchor_sl = parseInt(anchor_sl);
} else {
anchor_st = scroll_top;
anchor_sl = scroll_left;
}
if((object_id = getcookie(anchor_id+"_oid"))
&& (anchor_ot = getcookie(anchor_id+"_ot")) != ""
&& (anchor_ol = getcookie(anchor_id+"_ol")) != "") {
offset_top = (scroll_top + get_object_top(object_id)) - parseInt(anchor_ot);
offset_left = (scroll_left + get_object_left(object_id)) - parseInt(anchor_ol);
} else {
offset_top = offset_left = 0;
}
window.scrollTo(anchor_sl + offset_left, anchor_st + offset_top);
}
// アンカー消去。あえてとっておく必要がなければanchor_apply()後すぐ消去が望ましい。
function anchor_erase() {
setcookie(anchor_id+"_pid", "", -1);
setcookie(anchor_id+"_st", "", -1);
setcookie(anchor_id+"_sl", "", -1);
setcookie(anchor_id+"_oid", "", -1);
setcookie(anchor_id+"_ot", "", -1);
setcookie(anchor_id+"_ol", "", -1);
}
//-->
IRORIBATA
その他あれこれ
検索ロボットの中には写真(画像)だけをひたすら集めていくのがあります。 これは断固拒否。そのためとった方法は... |
|
|
あるときかなり長時間にわたってルーターのアクセスランプが点滅。 念のためHTTPサーバー(Apache2)のアクセスログを見てみると、ある検索ロボットがひたすら写真にアクセスしています。しかも元ページとは別個にアクセスしてくる様子からして、写真の収集が目的としか思えません。
検索ページには確かに写真や画像ばかり集めたものがあり私も見たことはありますが、作者の意図するページの内容は全く無視されているように思えて、どうも好きではありません。 ...で、これは断固拒否することにしました。
いちおうrobots.txtには Disallow: /idata/ と写真の入ったディレクトリを読まないようお願いは書いておきましたが過去の経験から無視するロボットもあり、これでOKなどとは微塵も思ってはおりません。
|
で、その方法とは?
最初に保存されたCookieをチェックしてCookieのない場合は拡大写真は出さない方法を検討しました。でもこれはすぐにやめ。時折Cookieの保存を無効にしている人がいるからです。 次に写真収集ロボットはまずページのソースを見て、画像の表示タグ<img src="..." のパターンで画像を検出し、アクセスするのではないかと推定しました。 また、以前より検索ロボットはどうもJavaScriptをちゃんと実行していないような印象も持っていました。 そこで、imgタグをJavaScriptで書き出してやることにしてみました。 <script type="text/javascript"><!-- imagename="image.jpg"; document.write('<img src="'+imagename+'">'); //--></script> ...で、しばらく様子を見ていました。確かにアクセスはぐんと減ったのですが、ロボットによってはちゃんと写真にアクセスしてくるのがあります。 どうやらJavaScriptのdocument.write()くらいは実行するロボットもあるようです。 さらなる改良が望まれます。
|
さらなる方法とは?
では、さらに改良を加えます。 htmlヘッダー内に以下の関数を定義 <script type="text/javascript"><!-- function showimage(imgsrc, option) { return('<img src="'+imgsrc+'" '+option+'>'); } //--></script> 写真を表示したい部分には、 <script type="text/javascript"><!-- imgsrc = "image.jpg"; option = 'alt="写真の別名" title="写真の説明"'; document.write(showimage(imgsrc, option)); //--></script> としてみました。 写真のファイル名を一旦変数を介して与え、さらに関数で表示させます。さて、効果のほどは...? これでだめなら悪質収集ロボットと判定したアクセスには一切情報は出さない(場合によってはアクセス遮断)という手もまだあります。...トップページに if(is_bad_access()){exit;} などとひとこと加えるだけだから簡単ですが...。
|
|
→結果…へんなアクセスはなくなりました。どうやら変数と関数を使うのは有効のようです。
|
|
|
|