付録「どうして動かないんですか?」

質問1:動きません。本に載っている画面と私のパソコンの画面が違うのですが。そのせいでしょうか?

回 答:本に載っている画面と違っていても問題ありません。そもそもパソコンは自分の好みに合わせて環境を変えていく、作っていくものですから一人一人違っている方が自然です。また、Windows、Macintosh、UNIX (Linux/BSD/Solaris等) によっても画面は違いますし、OSのバージョン (Windows 95/98/2000/XPなど)によっても画面が違います。スクリプトが動作しないとなると原因は別の所にあります。もう一度見直してみて下さい。動かない場合には、次に続く質問を参考にしてください。




質問2:エディタって何ですか? 私のパソコンに入っていますか?

回 答:エディタは文字を編集するだけのソフト(アプリケーション)です。これは、どのOS (Windows, Macintosh, UNIX) にも用意されています。Windowsであればメモ帳、Macintosh (MacOS X以前)ではTeachTextまたはSimpleText、Macintosh (MacOS X)ではテキストエディット、UNIXであればviがあります。第1章を参照してみてください。




質問3:本の通りにスクリプトを入力してページをアップロードしたのに動きません。持っているのはiモードの505iでJavaが動くと明記されています。

回 答:残念ながら携帯電話(iモード、Jフォン/ボーダフォン、cdmaOne)ではJavaScriptは動作しません。JavaとJavaScriptは名前は似ていますが、全く別のものです。いずれJavaScriptが動作する携帯電話が登場するかもしれませんが2003年8月現在では残念ながら存在しません。




質問4:本の通りに入力したのにエラーばかり出ます。本のプログラムが間違っているのではないですか?

回 答:この場合には原因がいくつか考えられます。まず、本の通りに入力したはずであっても些細な部分で入力ミスをしている場合があります。間違いやすいものとしては以下の文字/記号があります。再度確認してみてください。

'(シングルクオーテーション)と"(ダブルクオーテーション)
;(セミコロン)と:(コロン)
,(カンマ/コンマ)と.(ピリオド/ドット)
[と{
]と}
数字の0(ゼロ)と英大文字のO(オー)
数字の1と英大文字のI(アイ)と記号の|(縦棒)
数字の1と英小文字のl(エル)
英大文字のV(ブイ)とU(ユー)
英大文字のI(アイ)と英子文字のl(エル)と記号の|(縦棒)と記号の!(感嘆符)




質問5:本の通りに入力しました。英単語(命令)も記号も完璧です。しかしエラーで動きません。パソコン壊れているんでしょうか?

回 答:入力ミスがないのにエラーが出る場合、英単語や数字を「全角文字」で入力している可能性があります。必ず「半角文字」で入力してください。Windowsの場合、ソフトや書体によっては全角と半角の区別が付きにくいものがあります。書体を変更したりソフトを変えてみてください。




質問6:本の通りに入力しました。ちゃんと半角文字で入力しました。しかし、動きません。エラーが出ます。

回 答:Windowsの場合に、よく発生します。Windowsアップデートなどを行った場合や、スクリプトエンジンのみバージョンアップ、ブラウザをバージョンアップしたのに、スクリプトエンジンがバージョンアップされなかった(古いものに入れ替えてしまった)場合にエラーが多発します。ブラウザのバージョンとスクリプトエンジンのバージョンが一致しているか確認してください。以下のページの■ブラウザ編にバージョンを表示するスクリプトがあります。

http://www.openspc2.org/reibun/javascript/

駄目な場合には詳しい人に見てもらうのが一番早く解決できるでしょう。




質問7:本の通りに入力し、これまでの質問を見直してみましたが、まだ動きません。でも、友人のパソコンでは動きます。私のパソコンが壊れてしまったのでしょうか? 電気屋さんかメーカーに修理に出さなければ駄目でしょうか?

回 答:ブラウザの設定でスクリプトが動作しないようになっている可能性が高いと思われます。スクリプトが動作するようになっているか設定を見直してください。



質問8:本に載っているプログラムは入力し無事に動きました。しかし、自分がやりたい処理をしようとすると何をどうしていいか分かりません。本を読んでプログラムを理解したと思っているのですが。

回 答:本に載っているプログラムを入力して無事に実行でき、載っているプログラムが何をしているか分かっても自分の思い描くプログラムができるとは限りません。特にゲームなどは誇大妄想となってしまい、自分の技術では手に負えない状態になってしまうことがあります。また、JavaScriptではできない事をやろうとしている可能性もあります。簡単そうで難しい処理もあります。この場合は技術不足ですから勉強する事によって解決することができます。しかし、「これができて、これができない」というのは初心者/中級者には判断が難しい場合が多々あります。このような場合は掲示板かメーリングリストで質問してみると良いでしょう。その場合には漠然とした質問は避けて具体的に質問してください。

●悪い例
 JavaScriptでFF Xのようなのができますか?


●良い例
 JavaScriptでFinal Fantasy X (ファイナルファンタジーテン)のようなロールプレイングゲームを作ろうと思っています。ロールプレイングゲームなのでデータを保存する必要がありますが、ローカルディスク上にデータを保存できるのでしょうか?




質問9:本のサンプルが動きません。上記、質問やトラブルを見直しました。後はどうすれば良いのでしょうか?

回 答:印刷ミスや誤字脱字で間違ってスクリプトが掲載されてしまっている可能性もあります。該当ページと使用しているOS名およびブラウザ名を書いて下記メールアドレスまで送って下さい。

openspc@po.shiojiri.ne.jp



質問10:この本に載っているスクリプトを勝手に自分のページに使っても構いませんか? ゲームで画像だけ変えて載せても構いませんか?

回 答:構いません。ゲームなどは改造して載せても構いません。ただし、それによって生じたトラブルは自力解決してください。




質問11:Internet Explorerって何ですか? Netscapeなんちゃらも分かりません。

回 答:これはブラウザの名前です。ブラウザはインターネット上にあるデータを閲覧(見る)ためのものです。Windowsには標準でInternet Explorerが入っています。気にしないで使っている人もいるかもしれません。ブラウザは1種類だけでなく、たくさん存在します。MacOS XではInternet ExplorerとSafariが標準で入っています。また、LinuxではNetscape Navigator(ネットスケープ ナビゲータ)やMozilla(モジラ)が入っている場合が多くあります。




質問12:私のパソコン(Windows XP)では動いたのに、友達のパソコン(Mac)ではエラーで止まってしまうと文句が来ました。本の通りに入力したサンプルなのに、なぜでしょうか? 私も友人も同じブラウザ、Internet Explorer 5を使っています。

回 答:簡単なスクリプトでもエラーが出る場合にはスクリプト中に「全角空白」が混入している可能性があります。例えば以下のalert()を使ったサンプルはWindows版Internet Explorer 5以降、Netscape 6以降ではエラーが出ませんが、Macintosh版Internet Explorerではエラーになります。

<html>
<head>
<title>test</title>
<script language="javascript"><!--
 alert("OK?");
// --></script>
</head>
<body>
test
</body>
</html>

 alert()の前に全角の空白が入っているためにエラーになるのです。エディタなどで特殊文字の表示、全角空白の表示ができるのであれば、その機能を使って確認してください。




質問13:頑張ってスクリプトを作ったのですが、友人のパソコンでは見られない(エラーになる)とメールが返ってきました。私も友人も同じWindowsを使っています。ブラウザもInternet Explorerです。

回 答:Windows上で同じブラウザを使っていてもエラーになる事があります。ブラウザのバージョンが異なると古いブラウザでは動作しない命令などがあるとエラーになり動作しません。ブラウザのバージョンを確認してみてください。




質問14:私はWindowsでInternet Explorer 5.5を使っています。私のパソコンでは期待どおり動くのですが友人のパソコンでは、うまく動かないそうです。友人は私よりも新しいInternet Explorer 6です。新しいバージョンならば古いバージョンのスクリプトは問題なく動くと思うのですが。

回 答:新しいバージョンのブラウザであってもセキュリティの関係で動かなくなる場合があります。特にフレーム、インラインフレームなどは注意が必要です。またクッキーなどローカルディスク上に保存するスクリプトなどはブラウザの設定によっては書き込めずデータが保存できない事があります。




質問15:作ったスクリプトはサーバーに転送しないと動作しないのでしょうか? 確認のため毎回サーバーに転送していますが手間がかかって仕方ありません。

回 答:スクリプトはサーバーに転送しなくても動作確認ができます。作成したHTMLファイルをダブルクリックしてブラウザを起動させるか、すでに開かれているブラウザのページに作成したHTMLファイルをドラッグドロップ(ブラウザのウィンドウに放り込む)します。ブラウザのアイコンにドラッグドロップする事もできます。ブラウザのファイルメニューから「開く...」を選択して作成したHTMLファイルを選択してください。




質問16:算数や数学ができないと、やはりプログラムが作れないのでしょうか?

回 答:それは分かりません。ただし、場合によっては数学の能力が必要になる事もあります。すでにある計算式、公式などがあれば、その式をJavaScriptで計算できるように修正してください。




質問17:JavaScriptを覚えればプレイステーション2のようなゲームが作れますか?

回 答:プレイステーションなどゲーム機ではアセンブリ言語またはC言語が使われています。JavaScriptも基本的な部分はC言語を踏襲しています。しかし、将来プレイステーションやゲーム機などのプログラムを作りたいのであれば、C言語を勉強するのが良いでしょう。C言語は歴史も古く、多くの書籍があります。自分の目的にあった&理解できる書籍を購入しましょう。また、インターネット上にもサンプルや講座などもあります。参考例は多くありますから勉強するには事欠かないかと思います。




質問18:ページ作成ソフトを使って本のスクリプトを入力しました。動作したので一旦電源を落として翌日、見てみたら昨日入力したスクリプトとは字下げ幅が違っていたり空白行が増えてしまっています。寝ている間に何が起きたのでしょうか?

回 答:知らない間に誰かが操作して改変した可能性もあります。また、ページ作成ソフトの場合には入力したスクリプトやHTMLのタグなどを勝手に書き換えてしまうものがあります。スクリプトを入力後に、そのファイルを閉じて再度開いてみてください。この時にスクリプト部分が書き変わっているのであれば、ページ作成ソフトが勝手に書き換えてしまっている事になります。気になる場合にはエディタを使うのが良いでしょう。




質問19:カタカナ語ばかり出てきて分かりません。専門用語が多すぎます。どうしたらいいんですか?

回 答:YahooやGoogleなどの検索エンジンで「コンピュータ用語事典」のキーワードを入力して検索してみてください。そこで表示されるサイトにアクセスして用語の意味を確認してください。




質問20:JavaScriptでデータベースソフトを作れますか? また、市販されているアプリケーションのようなものは作れますか?

回 答:以前はできません、と回答できました。今ではWindowsではWSH (Windows Scripting Host)やHTA (HTML Application)、MacOS XではKonfabulator、またAdobe IllustratorやPhotoshop、InDesign、AfterEffects、Acrobatなどアプリケーション側でJavaScriptをサポートしアプリケーションを制御できるような時代になっています。結論からすると不可能ではないにせよ、それなりの知識は必要になります。




質問21:JavaScriptを覚えれば就職が有利になりますか?

回 答:それは分かりません。が、あまり有利にならないと思います。JavaScriptの場合、ほとんどはページ作成ソフトで簡単に利用できるようになっているためです。ただし、今まで手間のかかっていた処理をスクリプトで解決できるような技術/能力があり会社に貢献できるならば違うかもしれません。




質問22:掲示板かメーリングリストで質問しようと思うのですが、注意事項は何かありますか?

回 答:初心者です、と書くよりも以下の必要事項(該当しないものは削除)と質問内容を送るのが良いでしょう。また、エラーの出るサンプルが用意できるのであれば、そのページのURLも明記します。

OS:Windows 95/98/Me/2000/XP
   MacOS 8/9/X
   UNIX (Linux/FreeBSD/Solaris)
   超漢字

機種:メーカー名と型番(JavaScriptの場合、基本的に書かなくても良い)

エラー内容:(例えばdocument.writeの行でエラーが出る、など具体的に)

URL:(ページをアップロードして見てもらう事が可能な場合はURLを明記)

ソフト:(作成にエディタでなくホームページビルダーやDreamweaver、GoLiveなどを使っている場合)



質問19:13章のシューティングゲームを作るを参考にして完成したスクリプトを別ファイルにして名前を付けました(敵処理.jsや背景処理.js)。しかし、サーバーにアップロードすると読み込んでくれません。なぜですか?

回 答:ファイル名に日本語を使うとWindowsでは動作しても他では動作しない事があります。ファイル名には日本語を使わずに英数字を使ってください。




質問23:スクリプトを別ファイルにして英文字で名前を付けましたが、サーバーにアップロードすると他の人のパソコンでは動きません。私のパソコンでは動くのになぜですか? 友人によると敵などの画像も表示されないそうです。

回 答:何かの拍子でJavaScriptファイルのパス(位置)がローカルディスク上(C:〜などで始まっている)になってしまった可能性があります。scriptタグのsrcのパスを確認してみてください。




質問24:プログラムを作ろうと思ったのですが、やはり全ての命令を覚えなければ作れないのでしょうか?

回 答:そんな事はありません。どのような命令があるかはリファレンス本で確認できますが、やりたい処理をする命令があるかどうか調べればよいでしょう。何度もプログラムを作っていくうちに、よく使う命令は覚えてしまうものです。必要に応じてリファレンス本/サイトを見る、という方法で十分です。




質問25:スクリプトが動作しないのですがエラーが出ません。エラー表示もありません。使っているブラウザはMacOS XのSafari 1.0です。

回 答:Safariでは駄目です。Internet ExplorerかNetscapeで動作確認/エラーチェックする方が良いでしょう。




質問26:デバッガってないんですか?

回 答:Windows版のInternet ExplorerとNetscapeにはデバッガが用意されています。下記URLからダウンロードしてください。Mozillaには標準で入っています。

・Netscapeのデバッガ
http://developer.netscape.com/software/jsdebug.html

・Microsoftのデバッガ
http://www.microsoft.com/japan/developer/library/modcore/deconscriptdebuggingtools.htm




質問27:JavaScriptはcgiの代わりになりますか?

回 答:cgiプログラムのような処理で代用できる部分は、あまりありません。入力フォームに必要事項があるかどうかなど事前チェックなどに限られます。多くの場合に代わりにならないと考えて良いでしょう。




質問28:JavaScriptを使ってデータをローカルディスク上に保存できますか?

回 答:できます。1つはクッキーを使って保存する方法、もう1つはWindows版Internet Explorerのビヘイビア機能を使って保存する方法です。クッキーへの書き込みは、どのブラウザでも対応しているため多く利用されています。ただし、保存できる数に限りがあるため注意が必要です。以下のページにクッキーへの書き込み、読み込みサンプルがあります。

http://www.openspc2.org/reibun/javascript/

また、以下のページにクッキー処理を行うライブラリが用意されています。

http://www.shiojiri.ne.jp/~openspc/js/




質問29:AcrobatやPhotoshopでもJavaScriptが動作するとの事で本の通りに入れましたがエラーで動きません。alert()は動いたのに、エラーがたくさんでます。

回 答:JavaScriptでもECMA Script(基本部分の標準仕様)に準拠した部分であればAcrobatでもPhotoshopでも動作します。コアオブジェクトと言って基本的なオブジェクトは共通です。Boolean, Array, Date, Math, String, Number, Functionは共通です。しかし、それ以外のオブジェクトはブラウザやアプリケーションによって異なっています。このため、コアオブジェクト以外のオブジェクト(アプリケーション独自の部分/処理)を使う場合には、そのアプリケーション用としてプログラムを作らなければなりません。




質問30:JavaScriptでFlashムービーは制御できますか?

回 答:できます。ただし、Windows版のInternet Explorerおよび、Netscape Navigator 4(Windows/Macintosh)に限られます。




質問31:JavaScriptとVBscriptを1つのページ内で併用/併記できますか?

回 答:以下のようにscriptタグを個別に書けば可能です。

<script language="JavaScript"><!--
JavaScriptのプログラム
// --></script>
<script language="VBScript"><!--
VBScriptのプログラム
// --></script>




質問32:作成したスクリプトと画像をサーバーにアップロードしたら画像が表示されません。ローカルディスク上では正しく動作します。

回 答:ftpソフトで転送モードがアスキー形式になっている可能性があります。バイナリーモードにして転送してみてください。




質問33:ftpソフトって何ですか? JavaScriptで何かしないと駄目ですか?

回 答:ftp = File Transfer protocol(ファイル転送プロトコル)です。ftpソフトとは要するにファイル/データ転送を行う場合に利用されるソフトの事です。Internet Explorerにもftp機能があり、以下のようにアドレスに入力します。

ftp://ユーザー名@サーバー名/

 ユーザー名がabcでサーバー名がwww.ohmz.ne.jpであれば以下のようになります。

ftp://abc@www.ohmz.ne.jp/

 入力後、パスワードを求められるのでパスワードを入力するとサーバーに接続されます。ファイルをドラッグドロップするとサーバーにファイルが転送されます。
 うまく転送できない場合にはftpクライアントソフトを検索エンジンで探してみてください。FTP ExplorerやNext FTP、Fetchなどいろいろあります。




質問34:スクリプトを作成してサーバーに転送しましたが、うまく動作しません。ファイル名をsampleにしたのがいけなかったのでしょうか?

回 答:ファイル名にはファイルの種類を示す拡張子を付けて下さい。JavaScriptはHTMLファイル内に埋め込まれますからsample.htmlのように.htmlを付けて下さい。




質問35:JavaScriptの命令一覧(リファレンスなど)はないのでしょうか?

回 答:Web上であれば以下のURLにあります。Googleなどの検索エンジンを使って探すのも手です。

http://msdn.microsoft.com/workshop/author/dhtml/reference/dhtml_reference_entry.asp
http://www.microsoft.com/japan/developer/scripting/default.htm
http://wp.netscape.com/eng/mozilla/3.0/handbook/javascript/index.html
http://devedge.netscape.com/central/javascript/
http://www.mozilla.org/js/js15.html

 書籍であれば以下のものがあります。

改訂3版JavaScriptポケットリファレンス
ISBN:4-7741-1726-9




質問36:やりたい事があるのですが、うまくプログラムが作れません。簡単に複雑なことができる、やりたい事ができるライブラリやサンプル集などは、ないのでしょうか?

回 答:ライブラリは検索エンジンで探すと出てきます。以下にライブラリ、サンプルのURLを載せておきます。

http://www.fureai.or.jp/~tato/DHTML/simple/contents.htm
http://www.openspc2.org/reibun/javascript/
http://www.shiojiri.ne.jp/~openspc/js/




質問37:JavaScriptのプロパティ名を全部大文字にしたら動作しませんでした。大文字小文字は区別されるのでしょうか?

回 答:大文字、小文字は区別されます。ただし、HTMLタグ内に書かれるイベント名(onClickなど)は大文字でも小文字でも構いません。




質問38:サブウィンドウを開いて文字を出力しようとしたらエラーになりました。しかし、文字を出力する前にalert()命令を入れたら正しく動作しました。なぜでしょうか?

回 答:プログラムは間違っていないのですが、サブウィンドウなど生成までに時間がかかるものの場合、出力する前にウィンドウが出来ていない場合に発生します。alert()を入れると、その間にウィンドウを開く処理が完了するため動作する事になります。これを防ぐにはウィンドウが完全に開いているかどうかを確認してから書き込むようにします。




質問39:JavaScriptでWebページ上からExcelやWordなどのアプリケーションを実行することはできますか?

回 答:できません。(セキュリティの問題がない場合。ブラウザにもよる。)




質問40:この本にはあらかじめ用意されているオブジェクトだけでなく独自のオブジェクトも作れるとあります。どうやって作るのですか?

回 答:functionを使って関数を作るのと同じようにしてオブジェクトのひな形(設計図のようなもの)を用意します。newを使ってオブジェクト(実体)を作ります。具体的な例としては以下のようになります。これはRobotというひな形を作っておいてnewを使ってmajinZ, majinZZという2つのオブジェクトを生成しています。Robot内でthisを使ってオブジェクトのプロパティ(またはメソッド)を定義します。

function Robot(rName,rPower)
{
this.name = rName; // ロボット名
this.power = rPower; // パワー
this.year = 2003; // 製造年月日
}
majinZ = new Robot("魔神Z",100);
majinZZ = new Robot("魔神ダブルゼータ",200);
alert(majinZ.name);
alert(majinZZ.name);




質問41:本のサンプルを間違って以下のように入力して実行してしまいましたがエラーにならず入力ダイアログも出ませんでした。なぜですか?

n = prompt;

回 答:n = prompt;とした場合には変数nにはpromptへの参照(ポインタ)が入ります。JavaScriptでは()があると直前の値(式)を評価して実行するようになっています。以下のようにすると入力ダイアログが表示されます。

n = prompt;
n();




質問42:document.bgColor = "red";と書かなくても以下のように書いたらページの色が赤色になりました。なぜですか?

document["bgColor"] = "red";

回 答:オブジェクトのプロパティは連想配列としてもアクセスできるため「オブジェクト名["プロパティ名"]」と記述することもできます。フォームの部品(エレメント)へのアクセスも以下のように書くことができます。

document.calcForm.myTextFiled.value;
     ↓
document["calcForm"]["myTextField"].value;

*フォーム名はcalcForm、テキストフィールド名はmyTextFieldとした場合




質問43:ifで間違ってif (a === b)のように=を3つ書いてしまいましたがエラーになりませんでした。おまけに一応動作しているみたいですが、どうなっているんでしょうか?

回 答:=が2つの場合は比較する変数/データの型を一致させてから比較します。=が3つの場合は型が一致している場合で値も一致している場合のみtrue(真)となり、以後の命令を実行します。以下のサンプルをテストすると分かるでしょう。

a = 12;
b = "12";
if (a == b) alert("同じです"); else alert("違います");
if (a === b) alert("同じです"); else alert("違います");




質問44:変数に文字列を入れるはずが間違って文字列だけ以下のように書いてしまいましたがエラーになりません。なぜですか?

"Sample Text"

回 答:JavaScriptでは右辺の式の評価を行い左辺に代入を行います。式の評価を行った後に代入先がなくてもエラーにはなりません。右辺の式にエラーがなければエラーにならないのです。このため以下のように書いてもエラーになりません。

123.456
;;;;;;;;;;
12+34-56




質問45:onClickイベントで2つの関数を呼び出したいのですが、どうすれば良いのでしょうか? 以下のように書いても駄目でした。

<input type="button" value="押して" onClick="func1()" onClick="func2()">

回 答:複数の関数を呼び出す場合には;で区切って以下のように書きます。

<input type="button" value="押して" onClick="func1();func2()">




質問46:<a>タグでonClickイベントを使わずに似たような事ができるらしいのですが。

回 答:hrefにjavascript:命令のように書きます。以下のように記述すると関数func1が呼び出されます。

<a href="javascript:func1()">〜</a>




質問47:JavaScriptの命令をほとんど覚えましたが、自分の思うようにプログラムが作れません。この先、どうすれば良いのでしょう?

回 答:命令を覚えても思うようなプログラムは作れません。他の人のプログラムを見て勉強するのが早いでしょう。また、プログラムには「このような場合には、このようにプログラムを書く」という手順(アルゴリズム)、定石があります。アルゴリズム事典などの書籍/Webページを参考にすると良いでしょう。




質問48:読んでも理解できませんでした。でも、勉強したいとは思ってます。どうしたら良いでしょうか?

回 答:他にも入門書はたくさんあります。また、Web上にもたくさんあります。なるべく、たくさんの本とWebページを見て自分にあったものを選択すると良いでしょう。