agenda 2001-10(中旬) アイデア等の源泉。

廃止@10/19

公開
2001年10月19日

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の背景画像だけが突出して多かった。というわけで、自分の環境だけではなさそう。しょうがないから背景画像を諦めた。ああ。

メモ@10/18

公開
2001年10月18日

CSS切り替えを一時的に廃止。サイトマップ表示用のボタンを絶対配置にして全体の再描画を防いでみた。

今後の方向についてメモ。

  • 発想の根源を、「ブラウザ」から切り離す。
  • navigator.cookieEnabledで判別して、CSS切り替えあるいは調整用の要素を生成(する要素を生成)

代替スタイルシート適用にしてもサイトマップ表示にしても、製作者はデータを用意しておくだけで、本来ブラウザが処理すべきことだという感がぬぐえず、何となく虚無感が。

生物化学兵器@10/16

公開
2001年10月16日

主婦がテロリストになったら、生物化学兵器と称してニクコップンをばら撒くのではないだろうか。

メモ@10/16

公開
2001年10月16日

最近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の値が常に変化しているはず。いつもこれに引っかかって悩むのでした。

クロスブラウザ@10/16

公開
2001年10月16日

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行ではある)

ホイールクリックのイベント@10/15

公開
2001年10月15日

無いものかなあと思ってGoogle検索をかけたら、agendaが2番目に出てきた。駄目だこりゃ。msdnで、onmousewheelというイベントを見つけたが、これはマウスホイールを回転させた時に発生するものだった。しかも多分IE6だけ。

続・IE6の不具合(DOM1)@10/15

公開
2001年10月15日

createTHead()すると、勝手にTBODY要素も生成されてしまうというのは、どうもIEだけのようだ。仕様書見ても何も書いてないから変だとは思っていたものの、合理的だから納得していたのに。この前はMozillaでも確認したような記憶があるのだけど……。思い込みって恐い。

ということは、THEADよりも先に、少なくとも一つのTBODYを生成しておけば間違いは無いということか。

IE6の不具合(DOM1)@10/14

公開
2001年10月14日

defaultValuedefaultCheckedに対応していない。INPUT要素の初期値と、ユーザーが入力した値との区別が無い。(別の方法で区別はできるものの)

ちなみにMozillaで、cloneNode()で複製したINPUT要素は、value(defaultValueではない)が複製されない。不具合と言えるかどうかは微妙。

新しいWindowで開かない@10/14

公開
2001年10月14日

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を使ってみた。鬱陶しい属性を片っ端から、という思惑。

メモ@10/14

公開
2001年10月14日

「このページの情報」というボタンか何かを設けて、一括して……

  1. タイトル
  2. クッキー
  3. 更新日時
  4. ページ構成
  5. サイズ
  6. アクセスキー切り替え(クッキー発行)
  7. 外部ファイル情報
  8. リンクのリスト
  9. Googleを利用した被リンク情報

等々を自動で生成(document.open)する。まずはUser-Javascriptで試験。関数呼び出し用のoption要素が異常に増えてきたので纏めたいというのもある。使えそうならこのサイトでも、例えば「Help」で発動するといいかも知れない。

アクセスキーについてさらにメモ

ユーザーに都合の良いアクセスキーを設定してもらい、[N]だのといった表記も可変にする。

window.onloadについて

再レンダリングが必要な処理は廃止する方向で(width、height指定の無いIMG要素のようなものだ)。

上へまいります@10/13

公開
2001年10月13日

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様、素早い対応有難うございます。意思表示はしてみるもんだ。ちょっと見直した日。(変なオチがつきませんように)

背景色微調整用CSS切り替えに関するメモ@10/12

公開
2001年10月12日
  • color、background-colorプロパティはRGB値で。
  • クッキー発行のタイミングは、window.onunloadで。

IE6 INPUT要素の怪@10/12

公開
2001年10月12日

きちんと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にも渡された。意味がさっぱりわからないものの、とりあえずメモ。

プロンプトと2バイト文字@10/12

公開
2001年10月12日

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を生成しないと駄目だ。

frameとJavaScript@10/12

公開
2001年10月12日

正直言って、JavaScriptでframeオブジェクトをいじった経験が無い。frame憎しとはいえ、この辺りもしっかり抑えておかないと見過ごすこともあるだろうと思う。

そういえば、WebMonkeyに、JavaScriptでブラウザが作れるとかいう記事があって、どういうことなのかと思ったら「戻る」「進む」「HOME」ボタンを模倣していただけでがっかりした経験がある。でも今考えてみると、frameを利用すれば、自分の好みに完全に適合した機能とUserInterfaceを兼ね備えたブラウザを作ることもできるような……、いや、できないような。とにかくやってみなければ分からない。

各frameオブジェクトのメンバーにそれぞれdocumentオブジェクトがあるのなら、DOMだって使えるのでは。今週末にでも試してみよう。

アクセスしづらい件@10/12

公開
2001年10月12日

J-COM Broadband東関東 よりメールが。

本件に関しましては弊社でも認識をしており、現在負荷軽減の対応を行っております。ということで、もうしばらく待ってみる。心配なのは、その対応でURIが変更になったりしないかということ。

ALLNET時代にはサーバーメンテナンス情報のメールが定期的に届いたものだ。J-COMからはそういった情報、というか、アナウンス自体一切無し。ただ、こういうメールが鬱陶しいという人もいるので、良いか悪いかは分からない。

J-COM@NetHomeのメンバーサービスのユーザビリティは異常に低くて、今日も一杯食わされた。ナビゲーションらしき領域の右上に、検索機能らしきものがあったものだから、キーワード「障害情報」で調べてみた。ところが、こいつはサイト内検索ではなくて、単なるExcite検索だった。Exciteによる「障害情報」の検索結果がずらり。Flashが3つも置いてあるページをわざわざ開いてExcite検索する人は多分珍しいと思う。

結局、障害情報らしきものは見つからず終い。ああ早く何とかしてください。何とかしてください。