JavaScript FAQ

(JavaScriptでよくある質問と回答)

 実際にあった質問と、その回答です。参考になれば幸いです。


質 問
JavaScriptを使うとNetscape 2.0 (Win95)が「特権違反」で停止してしまいます。このように、いきなり停止されては困るのですが、何かうまい解決方法はないでしょうか?
回 答
これはオプションのネットワーク設定...でJavaScriptを無効にすれば停止しなくなります。Win95版のNetscape 2.0はJavaScriptを使用すると停止しやすいようです。またUNIXでステータスバーに日本語を表示させようとしても、同様にフリーズしたり落ちたりする事があります。


質 問
JavaScriptは機種依存しないと聞いたのですが、どうも機種依存しているように思われます。具体的にはどこらへんが機種依存しているのでしょうか?
回 答
まず、文字(フォント)が機種別及び個人のマシンの設定、ネットスケープの設定によって異なるため、フォームに表示できる文字の数が異なります。Macで正常に表示できるようにしてもWin, UNIXでは駄目な場合があります。

 また、Mac版Netscape 2.0/3.0ではbgColor命令が他の機種とは異なった動作をします。2.0では、全面背景色で塗りつぶされ、3.0では最後に設定した色でしか表示されません。

 Netscape 3.0で追加されたscroll命令がMac版はどこでも表示座標を変更可能、Win95では表示範囲内でしか座標が有効になりません。フレームを使用した場合Win95ではスクロールバーを付けておかないとスクロールしない事があります。

 window.open()の設定値は、たとえばwidthなど1つでも設定がされていると、それ以外がすべてnoになりますが、Macではnoにならない(95とIEはnoになります)。

 改行コードが違うためフォーム内に改行が入った文字を表示すると崩れてしまいます。

 XBMの扱いが機種ごとに異なるため、表示結果がおかしくなります。


質 問
Macro Media Director (Shockwave for Directorを作成するソフト)の言語であるLingoでmouseDownに相当するものはありますか?
回 答
onClickイベントハンドラが、これに相当します。ただし、mouseUpはありません。


質 問
mouseOverを使ってマウスが画像やハイパーリンク先に重なったら、ステータスバーに文字を表示させたいのですがうまくいきません。プログラムは正しいはずですが、なぜでしょうか?
回 答
<A HREF="../" onMouseOver="status='Hello'">だけでは表示されません。イベントハンドラonMouseOverの最後にreturn true;を入れておく必要があります。つまり<A HREF="../" onMouseOver="status='Hello';return true;">が正解になります。


質 問
JavaScriptの関数を2つ作ったのですが、これをBODYタグ内で2つ一度に呼び出したいのですが、どうしたらよいのでしょうか?
回 答
通常BODYタグ内ではonLoad="〜"がよく使用されます。2つに限らず複数呼び出したい場合があります。例えば呼び出したい関数、A()とB()がある場合は、onLoad="A();B();"とすれば2つ呼び出すことが出来ます。onLoadやonClickの呼び出し先には必ず関数を書く必要はありません。この中には普通にJavaScriptの命令を記述する事ができます。つまり;(セミコロン、JavaScriptでは命令の区切りに使われます)で区切って書けばいくらでも記述できます。


質 問
bgColorを使って色を変化させようと思いプログラムを作ったのですが、一度BODYの内容が表示されてから色が変化します。Javascriptでは読み込まれた順番に命令が実行されると思ったのですが。
回 答
JavaScriptは次の順番で実行されます。

(1)文法チェック

(2)HEAD内の関数以外を実行

(3)BODY内のJavaScript(関数以外)を実行

このため、<HEAD>〜</HEAD>内に関数で色を変化させるようにしonLoadで呼び出した場合、BODYで指定した色が表示されてから関数が実行されます。そのため、思うように色を変えられないわけです。

また、bgColorはMac版は正常に動作しません(2.0/3.0)。


質 問
fgColorはTextColorだって書いてあるんですが、何の変化も起きません。
回 答
document.write(document.fgColor='XXXX')で指定できますが、bgColorのように画面構築後にハンドラなどでの変更はできません。


質 問
画像の上にマウスを置くと画像が動きリンク先も指定したいのですが、どうしたらよいのでしょうか?
回 答
Netscape 3.0であれば可能です。画像を表示するIMGタグにonMouseOverを記述しておきdocument.画像の名前.src="GIFアニメーション画像";とすればできます。


質 問
フレーム機能で、画面を4分割したとします。frame1の画像をクリックすると、同時にframe2とframe3の2箇所あるいはframe4の3箇所に指定したHTMLを読み込ませたいのですが、どのようにしたらよいのでしょうか?
回 答
画像をクリックしたら「parent.フレーム名.location.href="表示したいHTMLファイル名";...」を繰り返し記述すればできます。まとめて関数にしておくと便利です。


質 問
ヘルパーアプリケーション以外でローカルPC上のアプリケーションを起動するということは可能でしょうか?
回 答
残念ながらできません。


質 問
フォームに文字を表示させたのですが、Macでは正常なのにWin95などでは正常に表示されません。どこが悪いのでしょうか?
回 答
これは改行コードの違いから発生する現象です。ここのライブラリに改行コードの判別プログラムがあるので、それを利用して下さい。ただし11/20現在Explorer 3.0では正常に動作しません。


質 問
「return 2*3」の意味が分かりません。
回 答
これは関数の戻り値を設定する命令です。関数名がcalc()だとして、この命令が最後に実行された場合、a = calc()とするとaには2*3の答えである6が入ります。数値だけでなく文字列なども戻り値として扱えます。


質 問
メソッドとかいう言葉がよく理解できません。プロパティというのもあるそうですが、はてさて?
回 答
メソッドは「命令」、プロパティは「値」と思っていいでしょう。ここのページ及びライブラリでは、なるべくわかりやすいようにという配慮から、なるべくそのような専門用語は避けています。


質 問
関数の定義の所でfunction square(i)とあるiの意味がわかりません。一体これは何ですか?
回 答
これはパラメーター、日本語では引数と呼ばれ、関数にこの値を使って!という事を示す物です。変数でも数字でも文字列でも大丈夫です。例えばfunction calc(a){return a*2;}という関数があった場合calc(3)とすれば引数は3になり3*2で6が戻り値になります。


質 問
document.write("値は", i ,"です") で i の部分を" " でくくっていないのは、 i は変数だからでしょうか?
回 答
そうです。文字列だけは"〜"か'〜'でくくります。


質 問
function bar()は、bar の後ろになぜ( )がいるのでしょうか?
回 答
これは引数が何もないよ、という事を示すためにあります。これがないと関数なのか命令なのかわからなくなってしまいます。


質 問
document.write('</SCRIPT>');とHEAD内で書いたら、この後の命令が表示されて、何かおかしくなってしまいました。なぜでしょうか?
回 答
HEAD内に</SCRIPT>を書くと、なぜかそこでJavaScriptの定義が終わりとみなされてしまいます。document.write('</SCRIP','T>');のように分割して記述すれば直ります。間抜けな仕様というかバグです(^^;


質 問
return func();とした場合、Netscape 2.0では何も戻ってこないのに3.0だとundefinedとかいう文字が戻ってきてしまいます? なぜでしょうか?
回 答
3.0になって「型」のチェックが厳しくなったというか明確になったために、このような現象が発生します。return " ";等を記述し回避するのもよいでしょう。


質 問
JavaScript:関数名でなくTEST.HTML?引数みたいなことはできるのでしょうか?
回 答
できません。


質 問
外部からのtextをよみこむことはできますか?
回 答
cookie.txtファイル以外読み込めません。cookieに書き込まれた内容は期限が来るまで消えることはありません。cookieに関してはインプレス発行のINTERNET CGIブックの120ページ以降に解説がありますので、そちらを参照するかNetscape社のページで確認してください。


質 問
if (str == "")や if ((val min) || (val > max))の == や ||は何のことでしょう?
回 答
==は左側と右側の値が等しいかどうか調べます。||は左側か右側の条件が成立しているかどうか調べます(成立するとtrueになります)。条件判断というヤツです。


質 問
画像をクリックすると、その画像が音を出しながらアニメーションする、というようなことをしたいのですが、こんなこと出来るでしょうか?
回 答
Netscape 3.0+LiveAudioでなおかつpowerMac上でのみ可能です。というのも他のマシンではLiveAudioとJavaScriptがうまく連携されないためエラーになってしまいます。このような事を行うにはShockwaveの方が向いていると言えます。


質 問
ステータスバーやアラートに表示という文字を表示しようとしたら文字が化けてしまいます。どうしたらよいのでしょうか?
回 答
Explorer 3.0では文字化けしません。Netscapeでは表示など文字化けしている文字の後ろに\(円記号、機種によってはバックスラッシュ)を入れると正常に表示されます。つまり「表\示」とします。このようにしてもExplorer 3.0では正常に表示できます。


質 問
document.writelnは文字列を表示すると改行してくれると聞いたのですが、自動的に改行してくれません。どうなっているのでしょうか?
回 答
呼び出す前後に<PRE>〜</PRE>を入れるようにNetscape社のドキュメントには書いてあります。つまりPREタグを記述しないと駄目だという事です。


質 問
Netscape 3.0でイメージの書き換えが自由にできるという事でやってみたのですが、なぜかNetscapeがうんともすんとも動かなくなってしまいます。1枚目の画像は変更できるのですが、2枚目とか追加するとおかしくなってしまいます。どうしたらいいのでしょうか?
回 答
これはIMGタグのオプションであるwidthとheightを使って画像の大きさを指定していない場合に発生します。画像のサイズを指定すれば書き換えが自由にできます。


質 問
window.open()で新しいウィンドウを開く方法はわかるのですが、ウィンドウを開かずに他のURLへ飛ぶにはどうしたらよいのでしょうか?
回 答
現在のウィンドウで他のページ(URL)にジャンプするにはlocation.href="ハイパーリンク先"とすればOKです。


質 問
Dateオブジェクトを使って誕生日を求めるプログラムを作ったのですが、マッキントッシュ版が正常のとき、Windows95&unix -1日、Windows3.1 -2日のように日付が狂ってしまいます。どうしたらよいのでしょう?
回 答
Netscape (Mac, Win3.1)のバグです。機種を判断して対応する方法もありますが、機種だけでなくブラウザも考慮しなければいけませんので、Netscape社に文句を言って修正してもらうのがよいでしょう(^^; (グリニッジ標準時からの計算が狂っています。全部が全部狂っているわけではありません)


質 問
一定時間ごとにpageを入れ替えるjavascriptを作りたいのですが、どうしたらよいのでしょうか?
回 答
onLoad="setTimeout('func()',秒数*1000);をBODYタグ内に記述し、関数func()にはlocation.href="アドレス"としておけば可能です。

JavaScriptでなくMETAタグを使用する方法もあります。


質 問
onSubmitイベントハンドラをINPUTタグ内に記述して関数を呼び出すようにしたのですが、うまくいきません。関数は正しく動作しているようですが。
回 答
onSubmitイベントハンドラはFORMタグの中に記述してください。


質 問
マウスがリンク先に重なったら短いメッセージを出したいだけなのですが,onMouseOver=のところにどのようにメッセージを書いたら画面に文字が出るのでしょうか?<A HREF="http://Hello!!">とかもやってみたのですが・・・
回 答
<A HREF="http://リンク先" onMouseOver="status='メッセージ'; return true;">とすれば、お好みのメッセージを表示させることが出来ます。


質 問
JavaScriptライブラリの中に、「直前のURLを求める」というのがありますが、ネットスケープナビゲーターの「場所を指定して開く」で直接JUMPした場合、直前のURLを求める機能が働きません。

具体的には以下のようになります。

(1)JavaScript”直前のURLを求める”のURLをどこかにメモしておく。

(2)http://www.shiojiri.or.jp/などにJUMP。

(3)(1)でメモしておいたURLを入力してJUMPする。

(4)http://user.cnet.or.jp/o/openspc/OpenSpace/JavaScript/lib/refer.htmlにちゃんとJUMPしてくれる。

(5)”前のURLに戻る”をCLICKする。すると、

(6)Browsing is not permitted in that directory HTTP status code: 404 と表示される。ちなみにURLはhttp://user.cnet.or.jp/o/openspc/OpenSpace/JavaScript/lib/です。

 題目通りならば、http://www.shiojiri.or.jp/にJUMPするはずなのに全然違うところにJUMPしてしまいます。

 どうしてこうなるのでしょうか。

回 答
直接URLを指定しジャンプした場合、refererの機能が働かないようです。また(6)でエラーになるのは、Default.htm(サーバーがWinNTのため。UNIXだとindex.html)がないために発生します。


質 問
ハイパーリンク指定で別フレームのJavaScript関数を呼び出したいのですが、どうしたらよいのでしょうか?
回 答
<A HREF="JavaScript:関数名();" Target="フレーム名">とすればできます。


質 問
エラーダイアログを表示させたくないのですが。
回 答
まず、正しいJavaScriptを書く事です。ただNetscape 3.0ではwindow.onerror=nullとするとエラーダイアログのほとんどは表示されなくなります。


質 問
フレームを使用したページを作成したのですが、フレーム外のページ(元々)のページに戻す方法が分かりません。このままではフレームの中にどんどんフレームが出来てしまいます。
回 答
この場合は特にJavaScriptを使用しなくてもできます。<A HREF="〜" target="_top">とするとフレームは全てなくなります。元の親フレームに戻る場合はtarget="_parent"を使います。


質 問
レイヤーで背景色を指定したのですが、一度色を指定してしまうと二度と「透明」にできないのでしょうか?
回 答
bgColor = nullのようにnullを指定すれば透明に戻ります。