LINK要素をハイパーリンクにして生成するのを廃止。これ、結構処理に時間がかかる。ページ移動の手段は、目次ページから、あるいはサイトマップから、の2つくらいに絞った方が分かりやすそう。MozillaのLINK要素対応も大きい。
それに、Prev、Nextなんかは本当は右寄せにしたかった。できないこともないが、どうも強引なCSSになってしまって、各環境での表示確認が面倒臭いというのもある。インライン要素の右寄せは、以前IE5.01ユーザーから見えない
と言われたことがあって使う気がしない。
一つページを増やすごとに、サイト構造を記述した外部JavaScriptファイルが、約50〜100b増える。現在3kb、幾ら大きくても10kbくらいまでと考えているが、なんにしろ限界というのがある。10kbに到達するまでには、多分Personnelは完結していると思うけれども、それはうちだけの問題であり……。
もう一点。各文書のカテゴリ分類を、bodyタグのclass属性に頼っているのが痛い。カテゴリを変更しようと思ったら、HTMLファイルに手を加えなければならない。この辺、限界を感じる。class名を変更するくらいの手間があっても悪くは無いような気もするし。
それから、これはIE6の問題だが、DOMで生成したDIV要素のpositionを動かした時、背景画像を読み直すのは一体なんなんだ。未だに原因がわからない。5.5の時はこんなことはなかったのに。ファイル参照数を調べてみたら、DIVの背景画像だけが突出して多かった。というわけで、自分の環境だけではなさそう。しょうがないから背景画像を諦めた。ああ。
CSS切り替えを一時的に廃止。サイトマップ表示用のボタンを絶対配置にして全体の再描画を防いでみた。
今後の方向についてメモ。
navigator.cookieEnabledで判別して、CSS切り替えあるいは調整用の要素を生成(する要素を生成)代替スタイルシート適用にしてもサイトマップ表示にしても、製作者はデータを用意しておくだけで、本来ブラウザが処理すべきことだという感がぬぐえず、何となく虚無感が。
主婦がテロリストになったら、生物化学兵器と称してニクコップンをばら撒くのではないだろうか。
最近table要素を生成するスクリプトばかり書いているので、insertRow()、insertCell()等のありがたさが身に染みている。で、今更ながら気づいたこと。
var newDiv = document.createElement('DIV');
document.body.appendChild(newDiv);
createElement()の返り値はElement。appendChild()の返り値は追加されたNode。ということはこれは、
var newDiv = document.body.appendChild(document.createElement('DIV'));
と書くこともできる。追加される前に条件分岐したいとか、そういうことでもない限りは全く同じだと思う。
強制改行除去の部分に、よくやってしまうミスを発見。
var oBRs = document.getElementsByTagName('BR');
for(var i=0; i<oBRs.length; i++){
var oBR = oBRs.item(i);
var nHR = document.createElement('HR');
with(nHR){
className = 'UJS_HR';
style.display = 'none';
}
oBR.parentNode.replaceChild(nHR, oBR);
}
for文の()の中身は、毎回評価されるので、oBRs.lengthの値が常に変化しているはず。いつもこれに引っかかって悩むのでした。
Cross Browser 反対論デッドリンク@2002-09-24T18:37:16+09:00 というのを(やっと)見つけた。
Cross Browser の観点からブラウザの機能を分類すると、
A) W3C の DOM
B) Netscape 独自の Dynamic HTML
C) IE 独自の Dynamic HTML
D) 所謂 DOM Level 0
の四つとなる。
この四つのうち、将来性があるのは A だけである。 D は微妙だが、後の二つは遠からぬ将来に滅ぶ。そう長くは使えないと考えると、開発する気力が失せる。
その他、コードが馬鹿馬鹿しいほど長くなるため、付けられる機能が少なくなり、ダウンロード時間も長くなるというのが嫌だ。HP-DESIGN.NETというところで配布しているELEVATING NAVIGATORというスクリプトからブラウザ判別部分を取り除いたところ、たったの10行に減ってしまい、唖然としたことがある。ちなみに著作権表示(義務)が、7行だった。(ただ、非常に密度の濃い10行ではある)
無いものかなあと思ってGoogle検索をかけたら、agendaが2番目に出てきた。駄目だこりゃ。msdnで、onmousewheelというイベントを見つけたが、これはマウスホイールを回転させた時に発生するものだった。しかも多分IE6だけ。
createTHead()すると、勝手にTBODY要素も生成されてしまうというのは、どうもIEだけのようだ。仕様書見ても何も書いてないから変だとは思っていたものの、合理的だから納得していたのに。この前はMozillaでも確認したような記憶があるのだけど……。思い込みって恐い。
ということは、THEADよりも先に、少なくとも一つのTBODYを生成しておけば間違いは無いということか。
defaultValue、defaultCheckedに対応していない。INPUT要素の初期値と、ユーザーが入力した値との区別が無い。(別の方法で区別はできるものの)
ちなみにMozillaで、cloneNode()で複製したINPUT要素は、value(defaultValueではない)が複製されない。不具合と言えるかどうかは微妙。
IEなら、Shift+左クリック、Mozillaなら、Ctrl+左クリック。fubならタブロックなんて機能もある。たまに遭遇するtarget=_blankを消すために、Proxomitronのフィルタを使うなんて勿体無い。など思いつつ、なんとなく書いてみた(IE6用)。
function removeTargetAttr(){
var hyperLink = window.event.srcElement;
if(hyperLink.nodeName != 'A') return;
var attrs = hyperLink.attributes;
attrs.removeNamedItem('target');
// 存在しなければnull値が返るかも
}
document.onmouseover = removeTargetAttr;
他、拡張して色々やるためにNamedNodeMapを使ってみた。鬱陶しい属性を片っ端から、という思惑。
「このページの情報」というボタンか何かを設けて、一括して……
等々を自動で生成(document.open)する。まずはUser-Javascriptで試験。関数呼び出し用のoption要素が異常に増えてきたので纏めたいというのもある。使えそうならこのサイトでも、例えば「Help」で発動するといいかも知れない。
ユーザーに都合の良いアクセスキーを設定してもらい、[N]だのといった表記も可変にする。
再レンダリングが必要な処理は廃止する方向で(width、height指定の無いIMG要素のようなものだ)。
frameの欠片文書対策。ナビゲーションのハイパーリンクが全く無い時、掘ってみる関数。
function Sample(uri, num){
// uri : URI, num : 掘る数
var uri = uri.split('/');
if(uri[uri.length-1] == '') num++;
uri = uri.reverse();
for(var i=0; i<num; i++){
uri.shift();
}
uri = uri.reverse();
var root = uri.join('/') + '/';
return root;
// window.open(uri);
}
自分で見ても奇妙なスクリプトが出来上がり。配列の末尾要素を削除するメソッドが見つからい。ちなみに良い本も見つからない。あっても3000円も4000円もするJavaScriptの本。貧乏人には辛いです。Perlの本なんて買うんじゃなかったよ(一年前の話)。
J-COM@NetHome様、素早い対応有難うございます。意思表示はしてみるもんだ。ちょっと見直した日。(変なオチがつきませんように)
window.onunloadで。きちんとGoogleに渡すためのformを生成することにした。
var nForm = document.createElement('FORM');
with(nForm){
action = 'http://www.google.co.jp/search';
method = 'GET';
}
document.body.appendChild(nForm);
var nP = document.createElement('P');
nForm.appendChild(nP);
var nInput = document.createElement('INPUT');
with(nInput){
type = 'text';
name = 'as_q';
size = '25';
}
nP.appendChild(nInput);
var nHidden = document.createElement('INPUT');
with(nHidden){
type = 'hidden';
name = 'as_sitesearch';
value = document.domain;
}
nP.appendChild(nHidden);
var nSubmit = document.createElement('INPUT');
with(nSubmit){
type = 'submit';
name = 'btnG';
value = 'search';
}
nP.appendChild(nSubmit);
ところが、生成したFORM要素のinnerHTMLを見てみる(@IE6)と、
<P><INPUT size=25><INPUT type=hidden><INPUT type=submit value=search></P>
属性が足りない。name属性はどこへ。実体としてはあるようだが、innerHTMLで見ると消えている。特に、type=hiddenのvalue属性は実体としても、無い。
with(nHidden){
type = 'hidden';
name = 'as_sitesearch';
}
nHidden.value = document.domain;
と、このようにvalueプロパティの代入箇所をwith文の外に出してやったらinnerHTMLにも現われ、Googleにも渡された。意味がさっぱりわからないものの、とりあえずメモ。
User-Javascriptに個人的嗜好のくだらない機能をつけて遊んでいる今日この頃だが、Googleのサイト内検索機能をつけてみようと思い、軽い気持ちでスクリプトを書いてみた。
サイト内検索というのは、「検索語句 site:www.yahoo.co.jp」で検索すると、www.yahoo.co.jpドメイン内のみの検索結果が得られるというあれ。
試したのは、javascirpt promptに、検索語句を入力して、'http://www.google.co.jp/search?hl=ja&as_q=' + 検索語句 + '+site%3A' + document.domain; で、window.openするだけの極簡素なもの。
ところが、どうやっても「検索語句」以下の文字列の連結ができない。
ここで、IEではjavascript promptに日本語が使えないのを思い出したが、私は我侭なので、どうしてもpromptを使いたかった(入力用の要素を生成するのが面倒)。検索語句を改めてStringオブジェクトとして生成してみたり、escapeメソッドや、Arrayオブジェクトのjoinメソッドを使ってみたり、それはもう(私の頭で)考えられる限りの手を尽くした。
で、結局成功したのが、promptに入力した文字列を、一度document.titleに代入して、document.titleを連結するという方法。なんだかなあ。
オチとしては、文字列の連結はなんとか成功したものの、その連結文字列でwindow.openすると今度はGoogleに正しく渡されなかった。要するにURIでやろうとしたのが間違いだったということ。面倒臭がらずにちゃんとformを生成しないと駄目だ。
正直言って、JavaScriptでframeオブジェクトをいじった経験が無い。frame憎しとはいえ、この辺りもしっかり抑えておかないと見過ごすこともあるだろうと思う。
そういえば、WebMonkeyに、JavaScriptでブラウザが作れるとかいう記事があって、どういうことなのかと思ったら「戻る」「進む」「HOME」ボタンを模倣していただけでがっかりした経験がある。でも今考えてみると、frameを利用すれば、自分の好みに完全に適合した機能とUserInterfaceを兼ね備えたブラウザを作ることもできるような……、いや、できないような。とにかくやってみなければ分からない。
各frameオブジェクトのメンバーにそれぞれdocumentオブジェクトがあるのなら、DOMだって使えるのでは。今週末にでも試してみよう。
J-COM Broadband東関東 よりメールが。
本件に関しましては弊社でも認識をしており、現在負荷軽減の対応を行っております。
ということで、もうしばらく待ってみる。心配なのは、その対応
でURIが変更になったりしないかということ。
ALLNET時代にはサーバーメンテナンス情報のメールが定期的に届いたものだ。J-COMからはそういった情報、というか、アナウンス自体一切無し。ただ、こういうメールが鬱陶しいという人もいるので、良いか悪いかは分からない。
J-COM@NetHomeのメンバーサービスのユーザビリティは異常に低くて、今日も一杯食わされた。ナビゲーションらしき領域の右上に、検索機能らしきものがあったものだから、キーワード「障害情報」で調べてみた。ところが、こいつはサイト内検索ではなくて、単なるExcite検索だった。Exciteによる「障害情報」の検索結果がずらり。Flashが3つも置いてあるページをわざわざ開いてExcite検索する人は多分珍しいと思う。
結局、障害情報らしきものは見つからず終い。ああ早く何とかしてください。何とかしてください。