-JavaScript作成メモ-
(あるいは、素人プログラマのトホホな体験)


このページでは、JavaScriptをプログラミングして行く上で、気がついたこと、注意が必要だと思われること、あるいは、プログラミングのド素人ならではの、トホホな失敗を書いていきたいと思います。

*「JavaScript Developer Central 」はどこへ? (05.05.05)
 Netscape社のサイトには、開発者向けのページとして、「DevEdge Onlin」(http://developer.netscape.com/)というページが用意され、一般に公開されていました。そこには、JavaScriptに関する各種仕様書や、サンプル、ガイドを収めた「JavaScript Developer Central 」(http://developer.netscape.com/tech/javascript/index.html)のページもその中に含まれています。
しかし、2004年12月の初旬から、この開発者向けのページにアクセスできなくなってしまいました。そして2005年2月初旬現在でも、アクセスできない状態が続いています。
 確かに、Netscape Navigatorは、Netscape8.の開発者向けリリースがおこなわれたこともあり、一旦開発の区切りが来ていたことは、確かです。また、一般に公開された形の開発者向けのページが、このまま無くなってしまうとは思えません。
しかし、「JavaScript Developer Central 」は、JavaScriptが、バージョンごとにどのように変化、発展してきたかを知ることができる、言わばJavaScriptの歴史が全て残されている貴重なページでした。このページが、このまま無くなってしまうとしたら、残念なことです。
それにしてもせめて、仕様書のダウンロードだけでもしておけばよかった(;_;)。公開先にたたずです...。

*それはJavaScriptのせいではない(98.06.07)

よく聞かれる質問で、フォームから送られメールで受けたデータが文字化けして読めないと言うのがあります(といっても質問を受け付けている訳ではありません^_^;)。
これに関して、始めにおさえておきたいことが2点あります。それは「その文字は別に文字化けしているわけでは無い」と言うことと「これはJavaScriptとはなんにも関係が無い」と言うことです。
では、それを前提として...、フォームから送られるデータはURL形式に変換して送られます、従って受け取ったデータは読めるようにデコードする必要があります。
URL形式を読めるようにデコードするソフトは何種類かあります、雑誌のCD-ROMなどによく収録されていますのでさがしてみて下さい、また、「JavaScript関連リンク」でリンクさせて頂いているページで、デコード用のツールを開発し公開しているページがあるので探してみて下さい(回答は割合近くにあるものなんですよ^_^)。
*srcオプションの謎_完結編(97.12.23)
えー、今まで何度か話題にしていた「srcオプションの謎」についてなのですが、MIMEタイプの設定について自分なりにまとめたものを「詳解HTML&JavaScript辞典」のサポートページに書きました。
本来本を買って頂いた方のみを対象としたページ用に書いた文章なので本当はまずいのかもしれませんが、こちらにちょっと転載したいと思います(関係者の方々御勘弁を^_^;;)。
「MIMEタイプの設定方法」
*ECMAScriptについて(97.08.23)
 ECMA(EuropeanComputerManufacturersAssociation)がNetscape社の働きかけによりBorland社、SunMicrosystems社、Microsoft社と共に進めていた、Internetで使用するスクリプト言語の標準化作業が6月末に終り、JavaScriptをベースにしたスクリプト言語をECMAScript(ECMA-262)としてアナウンスしました。
これにより、JavaScriptは今までの単なる1社による独自規格のスクリプト言語から、完全にオープンでスタンダードなスクリプト言語となったことになります。
したがって、今までJavaScriptが抱えていた、仕様が公開されていない、あるいは曖昧であることから来る多くの問題が解消されて行くであろう、と言うことや、ECMAScriptを組み込んだ多種多様なInternet関連製品が、今まで以上に多くの会社から発表されるであろうことが期待できます。
現在、ECMAのWebに"ECMAScript"の仕様をdownloaded出来るようになっており。
MS Word file, self expanding(163'693Bytes)
Corresponding Acrobat PDF file(481'599Bytes)
の2種類のファイルが用意されています。
*あまり書かれてないけど重要なこと(97.07.01)
JavaScript1.0(Netscape2.x対応のJavaScript)を記述する時はlanguageオプションを
<script language="JavaScript">
とし、JavaScript1.1(Netscape3.xで追加されたJavaScript)を記述する時はlanguageオプションを
<script language="JavaScript1.1">
とし、JavaScript1.2(Netscape4.xで追加されたJavaScript)を記述する時はlanguageオプションを
<script language="JavaScript1.2">
と記述します。
このようにlanguageオプションにJavaScriptのバージョンを記述することによって、ブラウザのバージョンからおこるエラーを回避出来るので、記述することをお進めします。
これは、今年の初旬に発表された仕様なのですが、その後のJavaScript関連の記事や本を読んでもなぜか紹介されていない^_^;;、自分はJavaScript関連の記事や本を見た時、バージョン記述をしているかどうかを、その記事や本がどの程度気を付けて書かれているかの判断基準の一つにしています。
*document.close()について(97.04.29)
"window.open()"を使って新しく開いたウインドウに、"document.write()"で文字を書き出す時などは、一番最後の行に"document.close()"入れる必要が有る、これを「明示的にドキュメントストリームを閉じる」と言うそうで(^^、こうしないとNetscapeでは最後の1行が書き出されなかったり、Explorerでは何も表示されず地球のアイコンが回りっぱなしになってしまったりする場合が有ります(2例ともまだ文章続くと思ってブラウザが待ち状態にのままになるためです)。
ただ、Netscape2.x(MachintoshNetscape2.0で確認)版の場合、"document.close()"を入れると反対にドキュメントストリームが開きっぱなしになるみたいで、ステータスバーがずっと読み込み中の状態になってしまいます...(+_+?。
まあでも、それは特殊な例として"document.close()"は出来る限り記述したほうが良いようです。
*Macintosh版Netscape3.0で"DocumentSource"使用時の注意(96.11.23)
Macintosh版Netscape3.0で"DocumentSource"を使って、ソースコードを見た時実際のコードと違う場合が有ります。
まず、書いた覚えの無い"<BASE HREF="URL">"が付いてくる、その他詳細及び問題になりそうな点を纏めて見ました。
なんか、Netscape3.0になってMacintoshでフェードイン・フェードアウト出来なくなったのも、ここらあたりに原因が有るような気がします。
*srcオプションの謎2(96.09.25)
srcオプションがWWWサーバーにファイルを置いたときうまく使えなかった件、Java及びJavaScript関連のメーリングリストJava House MLの情報によると、やはりサーバー側に設定が必要とのことで、httpサーバの"conf/mime.types"に"application/x-javascript js"を追加すると、拡張子".js"のファイルをJavaScriptとして認識してくれるようになるとのことです(^_^)。 -この件に関して完結編有り-
*JavaScriptの参考資料について3(96.07.24)
JavaScriptの日本語の、参考資料になりそうな書物の第3段!!(第一段はこちら)(第二段はこちら)
今日"NetWorld+INTERROP96の会場で「はじめてのJava&JavaScriptプログラミング」田中ひろゆき著(ソフトバンク)\2,700-.と言う本を入手しました、CD-ROM付きでこの値段はまあ許されるのではないでしょうか。
内容的には(まだななめ読みですが)、Scriptの書き方や、リファレンスが奇麗なレイアウトで、丁寧に書いてあり、今まで見て来た限りでは一番解説書らしい解説書です。
ただ残念なのは、JavaScriptのサンプルScriptの数はかなり少ないので、それを期待した人はがっかりするかもしれません(しかし、そのサンプルの解説はかなり詳しくされています^_^)。
まあ、Javaをやって、その流れでJavaScriptもやろうという人や(これこそ、この本のコンセプトですね)、WebPageに出ているJavaScriptがどういうふうに動いているのかを知りたい人には、参考になると思います。
あと「HTMLとJavaScript」Java技術研究会編(工学図書)なんですが、じつは半月ほど前に手に入れていました(^_^;、何処そこで売っていたよ、等の情報を数人の方からMail頂きました、この場を借りてお礼申し上げますm(_ _)m。
因に、自分は東京駅近くの「丸善」で買いました、どうやらパソコン専門店の本屋より丸善とか紀伊国屋のような大きな書店が狙い目の様です。
で、肝心の内容なのですが、「何処かで見た文章、何処かでみたサンプルScript」、と思ったらinternetuserのJavaScript特集と同じ人が書いていました、内容はリファレンスやサンプルが多少増えていますがinternetuser96年4月号とほぼ同じです(;_;)。
ページ数も、400ページの本のなかにJavaScriptに関しては50ページ弱しか割かれていません、安くない本ですしJavaScriptだけが目的でこの本を入手しようと思っている方は、一度内容を確認してから判断することをお進めします。
*JavaScriptの参考資料について2(96.06.29)
JavaScriptの日本語の、参考資料になりそうな書物の第2段!!(第一段はこちら)
internetuser96年8月号(ソフトバンク)と
InternetSurfer96年8月号(エーアイ出版)にJavaScriptの紹介が載っています。
SunWorldの中の綴じ込み記事のJavaWorldの中にもJavaScript関連の記事が載っていることが有ります。
あと「HTMLとJavaScript」Java技術研究会編(工学図書)\3,500-.という本が出たというので、秋葉原を徘徊して探しているけど、見つからない(;_;)、値段からみても発行部数少なそうだし、どんな本なんだろう。
*Netscape2.0とGIFアニメーションについて(96.06.13)
JavaScriptと同時にNetscape2.0からサポートされるようになったGIFアニメーションだが、Netscape2.0ではJavaScriptとGIFアニメーションとの相性はかなり悪い。
特にGIFアニメーションの下に、JavaScriptが記述してあるようなpageでは、JavaScriptが記述してあるところでPageの読み込みが止まったり、最悪の場合、ハングアップやバスエラーを引き起こし、再起動やむなし、ゲッ!カタログBツリーエラー(注*MacintoshでNetscapeをハングアップさせたときによく起こるノートン先生もお手上げなエラー)、と言ったことにもなりかねない。
JavaScript関連リンクでリンクさせていただいている「一撃必殺JavaScript日本語リファレンス」(ここはJavaScripter必読のPageです^_^)の「裏業やTips」その3で「Atlas Pr2では、アニメーションGIFの切り替わる際にもイベントを発生するようになった」と報告されているところを見ると、それ以前のバージョンであるNetscape2.0では「イベントを発生させられない」、と言うことになるので、ここら辺に何か問題があるのだろう。
したがって、現時点の最新バージョンであるNetscape3.0b4(Atlas)では問題は解消されているます、でもNetscape3.0b4(Atlas)はあくまでもBETA版ですので、テスト目的以外でAtlas対応のWebPageを作ることを自分はお進めいたしません。
*Netscape3.0b4でステータス行に文字を表示させた時の注意(96.06.05)
Netscape3.0b4(Atlas)でステータス行に文字をスクロールさせるJavaScriptなどを実行させた時、変な動きをすることがある、どうも色々問題ありそうなので少し実験して見ました。
まず、初めの問題として"window.status"の処理がやたら重いと言うことがあります、そこでTest1では"window.status"で何回もステータス行に文字を書き出すことによって、アニメーションの様な効果を出したScriptを用意しました、Netscape2.0とNetscape3.0b4(Atlas)とで実行速度の違いを試してください、と言うかNetscape3.0b4(Atlas)では死ぬほど(死なないけど^_^;)遅くて正直言って使い物になるレベルではありません、おそらくこれが原因となって、Netscape3.0b4(Atlas)で文字をスクロールさせた時のスピードが少し遅くなるようです。
もう一つ問題として1バイト文字は、スペースや記号ごとにまとまってて表示されると言う現象があります、そこでUnderTitleVer.0.01を少し変更して、Test2を作って見ました、Netscape3.0b4(Atlas)で見ると文字がブロックごとにまとまってポコッポコッ、と言った感じで出て来て非常に見にくいです。
しかしこの現象は、Test3で見ていただけるように、2バイト文字をスクロールさせたときには起りません。
これらの点は、Netscape3.0b4(Atlas)はその名の通りBETA版ですので、正式版が出る前、あるいは出た時に、また何か変化があるんじゃないかな(あるいは、あってほしい)と自分では思っています。
まあそれまでは、スペースを入れるなどして、なるべく見栄え良く工夫する必要はいるのでしょうね。
ところで、ステータス行の文字スクロールに関しては、「JavaScript関連リンク」でリンクさせていただいている、「検索デスク SearchDesk > JavaScript」や「一撃必殺JavaScript日本語リファレンス」にサンプルや、解説がありますのでお進めです。
*デバックの時の注意(96.06.03)
Netscapeを使って、JavaScriptのデバックをするときには、多少面倒でも1回1回Netscapeを完全に終了させてから、JavaScriptの記述してあるファイルを、読み込む様にすることをお進めします。
これをせずに(特にNetscape2.0では顕著な様ですが)例えばReloadボタンなどを使って、更新したJavaScriptの記述してあるファイルを読み込もうとしても、キャッシュから読み込まれてしまうせいか、又は、メモリにゴミデータが残るせいか、更新前の状態で読み込まれてしまうことがある。
特に、JavaScriptのエラーで出た箇所を訂正したはずなのに同じエラーが出続ける(スペルミスを直したのにとか、この行のこの記述は移動させたのに、エラーが出る)、と言った時などは、この方法で解消される場合が多いです。
*srcオプションの謎(96.05.26)
数人の方から「srcオプションってなぁに?」と聞かれたので少し解説を(といっても質問を、受け付けている訳ではありません^_^;)、実は自分も今まで使ったこと無かったので正直言ってよくわからない所があるのですが、簡単に言って、Scriptを外部から読み込んで使う方法です。
具体的には、<script src="URL"> </script>とScriptのあるURLを指定し、指定したURLにScriptのソースを置きます、この時、JavaScriptの場合、拡張子を".js"としてください、ブラウザ側では(たぶん)この拡張子でScriptの種類を判断しているので、ソースコードには、<script language="JavaScript"> </script>を記述する必要はありません。
と、これだけでうまく行けば話は簡単なのですが(^^;、「正直言ってよくわからない所」とは以下の所です。
少なくともNetscape Navigator 2.0のMacintosh版ではうまく動かない:Atlasでは動きます、Macintosh版以外のNetscape Navigator 2.0でも動くような気がするけど、確認とれる環境がありません(;_;)。
</script>のタグをつけないと<script src="URL">より下の表示が狂う:まあこれは仕様なのでしょうね。
<script src="URL"> </script>以下の文章が表示されない:うーむ、<hr>や<form>みたいなタグは評価されるんだが、文字関係は何も表示されません、Macintosh版以外はどうなのだろう?まあ</body>の直前に置いてもScriptは機能するので、<script src="URL"> </script>は</body>の手前に置け!!、と言うこと何でしょうか?。
そして最後に
ローカルではうまく動いたのに、サーバに上げるとうまく動かない:ぉぃぉぃ(^-^;;、おそらくScriptを読み込むタイミングに問題があるか、BEKKOAMEのサーバ側で規制をかけてるのでしょう(おそらく後者だと思います、だってこれが許されたら結構問題だもん)。
とまあ「srcオプション」の謎はますます深まって行くのでした(一人で勝手に深みにはまってる、という話もある)、で、ここら辺何かご存じの方がいらっしゃいましたらMail下さい、お願いしますm(_ _)m。
-この件に関して、追加情報完結編有り-
*大きな画像データの後にJavaScriptを読み込ませた時の注意-2(96.05.25)
大きな画像データの下にJavaScriptを置いた時、Netscape2.0でそのPageを表示すると、JavaScriptの動作が不安定になることは下でも書いたが、この現象は<img src=""alt=""width=""height="">といった風に、widthとheightを使って、表示されるイメージのサイズをあらかじめ指示しておくことによって回避出来るようである。
例えば、画像データのサイズ指定をしていない(具体的には<img src="robot.gif"alt="robot.gif">と記述している)Test1ではJavaScriptで記述しているボタンがうまく作動しないが、画像データのサイズ指定をしている(具体的には<img src="robot.gif"alt="robot.gif"width="474"height="198">と記述している)Test2では正常に作動する。
この時、画像データのサイズは正確に指示しないと、変なサイズで表示されてしまいますね(^^)。
*大きな画像データの後にJavaScriptを読み込ませた時の注意(96.05.20)
大きな画像データの下にJavaScriptを置いた場合、JavaScriptの動作が不安定になる。
例えば、「パール兄弟HomePage」(今はもう修正済みです)の場合、ここにはリンク指定がしてあるテキスト上に、マウスカーソルが来たとき、下部ステータス行に文字を表示するJavaScriptが埋め込んであるのだが、初めにこのページに来たとき、リンク指定がしてあるテキスト上にマウスカーソルを持ってきても、JavaScriptが評価されず、ステータス行には、リンク先のURLが表示されるだけである、しかし一度Backボタンで前のページに戻り、再びForwardボタンで帰って来るとJavaScriptが正常に動き、ステータス行に文字が表示される様になる(この時ReloadしてもJavaScriptは正常に動かない)。
その後は、NetScapeを終了するまでJavaScriptは正常に作動する、しかし一度NetScapeを終了させると、同じ症状が起こる。
この症状を解消するには、画像データのサイズを小さくしたり、画像データを読み込まなくしたり、「イラストレーションズ」(今はもう修正済みです)の様に、画像データが読み込まれるより前に、JavaScriptを読み込む必要がある。
この症状は、リンクさせていただいている「JavaScriptBomb」でも報告されていますのでこちらも参照願います(どうやらWIDTH, HEIGHTを指定すれば良いそうです今度試して報告します(^^))。
注)上記の症状は、Win3.1版・68KMac版・PPCMac版のNetscape2.0で確認できました、しかし今日PPCMac版のNetscape Navigator Atlas PR2で試したところ、この症状は解消されいるようです。
-この件に関して、回避策を追加しました-
*文字化けについて(96.05.13)
document.writeを使って文字を書き出した時、JavaScriptが2バイト文字をサポートしていないため文字化けをおこす可能性が有ることは、リンクさせていただいている「About JavaScript 」「JavaScriptBomb」 で参照いただける通りですが、自分も思わず微笑んでしまう文字化けに色々と出会いました、その中で一番笑ったのは、「表示」が表示されず と表示された時です(^-^;。
ところでこの文字化けの対策ですが、試しに「About JavaScript 」に有るようにバックスラッシュ(日本だと文字コードの関係で円マーク)をかまして見ましょう。
おお!!ちゃんと されますね(^_^;;。
あと、JavaScriptではないのですが、<blockquote>などの自動改行するタグを使用したPageをNetscapeで見た場合、改行位置の文字によっては文字化けをおこす時が有ります(このPageにもあったりする)、ごようじんごようじん。
*window.openについて(96.04.28)
window.open("URL","name"を使って新しいウインドを開いた時の注意については下で書いたが、開いたウインドウの内容がそんなに多く無いのなら、ウインドウの内容をdocument.writeで書き出すことも出来る。
この場合、PasswordVer.0.02.1のように、イメージを表示したり、リンク先を指定することも出来るし(ただしウインドは、端末側で作られるので絶対パスで指定して下さい)、WindowOpenVer.0.02の"Type6"のように開いたウインドにさらにJavaScriptを記述することも出来ます。
しかし、<meta http-equiv="refresh" content="*; URL=url">を使ってリドローさせようとしたけどこれはうまく出来なかった、ここら辺はもう少しテストしてみて何かわかったらまた報告します。
*Netscapeでのバグについて(96.04.27)
新しいウインドをwindowオブジエクトとOpenメソッドで開いた時、window.open("URL","name","toolba=・・・と"URL"を指定してもMacintoshではうまく機能しない、これはMacintoshとX window版のNetscapのバグらしい、このことに関する解決策の一つが、リンクをはらせていただいている「JavaScript-Notes 」出ています。
また、これは自分の環境では確認とれないので、正確にはなんとも言えないのだけれど、Win95の英語版Netscapeでステータスに文字をスクロールするJavaScriptを実行させたとき、日本語(2バイト文字)を使うと文字化けをおこすことがあるそうです。
JavaScriptが採用されてまだ間も無いせいか、この手のバグはぼちぼち聞きます、なるべく複数のOS環境で動作確認をすることを、お進めします(て言ってもなかなか難しいですね^_^;、今後もバグ情報を載せて行きますので参考にしてください)。
*文字修飾について(96.04.25)
JavaScriptで出来る文字修飾の能力は、リンクさせていただいている「JavaScriptちょいと実験」で参照いただける通り、NetscapeVer.2.0で表現できるレベルのことは、ほとんどすべて表現することが出来るくらい高い。
さらにdocument.writeで書き出された文字は、JavaScript内、あるいは前後のHTMLのタグにも反応する、
つまり
<script language="JavaScript">
<!--------------
document.write("例1)こうしても".bold())
//-------------->
</script>

<script language="JavaScript">
<!--------------
document.write("<b>例2)こうしても</b>")
//-------------->
</script>

<b>
<script language="JavaScript">
<!--------------
document.write("例3)こうしても")
//-------------->
</script>
</b>




といった具合に、同じ結果となる。
ここらあたりの自由度は、「ちょっと高すぎるんじゃないかな?」と思うぐらい、高いです。

*あっとまーくの謎(96.04.23)
JavaScriptを組む時、先頭にスペースを入れてブロックごとに段落を下げたくなるのが人情というものである(ォィ.ォィ(^_^;))。
そのスペースに、半角スペースや全角スペースやタブなどをうっかり混在させてしまうと、JavaScriptを実行させたとき「不正な"@"があるから実行できません」、と言うエラーが返ってくる時がある。
これはおそらくNetscapeの2バイト文字認識がまだ未熟なため、たまたま"@"に当る文字コードにぶつかり、スペースを文字と認識してしまうためであろう。
そんな時は、スペースを半角スペースで統一してしまうと問題は解消されます。
*ステータスに文字をスクロールさせる時の注意(96.04.22)
JavaScriptで、ステータスの部分に文字をスクロールさせた時、しばらくそのままにしていると「JavaScript Error: out of memory」と言うエラーメッセージが出てScriptが中止されてしまいます。
このエラー原因は「JavaScript関連リンク」でリンクさせていただいている、About Javascriptに詳しく出ています。
また、エラーを回避するために、スクロールさせる回数を限定する方法が、同じくリンクさせていただいている、検索デスク SearchDesk > JavaScript にありますので、合わせて参照することをお進めします。
*JavaScriptの参考資料について(96.04.21)
JavaScriptの日本語の、参考資料になりそうな書物 は非常に少ない、自分の知っている範囲では
・internetuser96年4月号(ソフトバンク)
・TheBASIC96年5月号(技術評論社)古旗さん情報ありがとう(^_^)/
の2冊だけ、両方ともこれだけですべてわかる!、といったたぐいの物では無いのですが、とても参考にしています。
-この件に関して、追加情報が有ります-
*コメント欄での失敗(96.04.20)
JavaScript内でコメントを入れる時は
//コメント
とか
/*コメント*/
てな具合にするんだけど、面度臭かったので?使いなれた??
<!---------コメント-------->
を<script></script>内で使って見た、NetscapeVer2.0で見る限り、JavaScriptもちゃんと動くし特に問題ないようだったのでそのままにしていた。
しかし有る日、念のためNetscapeVer1.1で見たところ、な、なん と!!<!---コメント--->以下のソースが丸見えになっているではないか!!
「サポートしてない」とは「なにも起らない」、という事ではないのですね(^^;。
(教訓)
仕様はきちんと守りましょう、それと、かならず1度はJavaScript未対応のブラウザでも問題無いか確認とりましょう(^-^;。
因みに
<script language="JavaScript">
<!--------------
すぷりくとのそーす
//-------------->
</script>
とするとJavaScript未対応のブラウザでも"すぷりくとのそーす"の部分が表示されることはありません。

[JavaScriptPageに戻る]