の形で呼ぶ。
//
// 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);
}
//-->
倉金家ホームページ
趣味の部屋/ホームページ余話
先日ブラウザをインターネットエクスプローラの11にアップグレードした友人から<textarea>で長い文章が自動改行されなくなったという連絡を受け調べてみました。 どうやらブラウザの不具合のようです。幸い解決法が見つかり対処できました。 |
|
|
ここのところサーバーは順調に稼働しているし、迷惑アクセスは概ね撃退しているし(雑魚は無視)、特に書くこともない。 でもたまには更新しないと寂しいな、などと思いつつ何かないかと考えたら最近新しいMSIEのバージョン11でちょっと不具合があったので、この際細かいことだけど書いてちゃおう。
実は友人がこのサーバーを使ってホームページを作っており、ページの内容を編集窓から打ち込む。編集窓は<textarea>を使っている。 ある日突然、編集時に長い行を打ち込むと自動改行されず一行になって書き込みがやりにくいと言ってきた。 そのような現象はこちらでは全く出ないし最初わけがわからなかったが、よく聞くとどうも少し前に新しいパソコンを買って最近さらにブラウザをアップグレードしたらしい。 ログを見てみるとブラウザ名は、 Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; MALNJS; rv:11.0) like Gecko となっている。 インターネットエクスプローラ11のようだ。 以前は問題なかったと言うし、どうもブラウザをアップグレードしたためと思われた。
|
それでは<textarea>に明示的に改行のオプション指定 wrap= を入れて自動改行するようにしようと、 <textarea cols="80" rows="20" wrap="soft">(長い編集文章)</textarea> とした。 しかし結果は同じで、だめだという。
ではgoogle先生にお助けを乞おう。しかしながら、MSIE11 textarea 改行などと入れてもほしい結果は出てこない。改行するのはあたりまえだからか?このサイトだけの問題なのか? いろいろ語句を変えて最初日本語のサイトだけ見ていたが、この問題に言及しているサイトは見つけなかった。 しかたがないので英語のサイトをかたっぱしから見ていたら、何とか同じような問題に言及している(らしい)サイトを見つけた。そこにはwhite-space:pre-wrapなどと書いてある。
|
普通<textarea>ではこれがディフォルトじゃないのか、などと思いながらこれを追加し、 <textarea cols="80" rows="20" wrap="soft" style="white-space:pre-wrap;">(長い編集文章)</textarea> としてみると、なんと見事にOK!
|
|
いったいこれはMSIE11のバグなのだろうか。それとも意識しての仕様なのだろうか。 どちらかよくわからないけど、あたりまえの指定だから別にすべてのブラウザ向けに書いておいても害はないはずだし、ともかく解決したから、よかった、よかった。 それにしてもログを見ていると最近MSIEを使っている人がずいぶん減ったなあ。まあこれじゃあしょうがないか。
[教訓] あたりまえのことでもちゃんと言わないと通じないこともある。人間も同じだ。
|
|
|