プロが教える店舗&オフィスのセキュリティ対策術

Javaについてよくわからないのですが・・・

<SCRIPT language="JavaScript1.2" src="/../../cgi-bin/counter.cgi?pg=abc"></SCRIPT>

というスクリプトがあります。 これはページのhtml文中に埋め込んでcounter.cgiを呼び出して何ページ見られたか、をカウントするためのスクリプトです。 これをIE6.0で見ると問題なくスクリプトエラーもなくみることができます。 しかしホームページビルダー11では毎回、「プレビュー」に切り替えるたびに

このページのスクリプトでエラーが発生しました。

ライン2
文字 1
エラー  文字が正しくありません
コード 0

このページのスクリプトを実行しつづけますか?

というエラーが出てきます。 繰り返しますが、IEでこのページを直接開いた時にはこのようなエラーはでてきません。あくまでビルダーのプレビュー画面を開く度に毎回出てくるのです。ここで質問ですが

1なぜIE単体で見るとエラーはでないのにビルダーのプレビュー(IEを使用しています)ではエラーが出てくるのでしょうか?

2スクリプトを書き換えてみました。


<SCRIPT language="JavaScript1.2">
<!-- src="/../../cgi-bin/counter.cgi?pg=abc"// -->
</SCRIPT>

もしくは単純に

<SCRIPT language="JavaScript1.2">
src="/../../cgi-bin/counter.cgi?pg=abc"
</SCRIPT>

この二つではエラーはでてきません。しかしカウンターそのものが今度は動作しません。
この場合、カウンターを動かしてなおかつエラーを出さない文にするにはどうしたらよいのでしょうか。

なお、IEのインターネットオプションから「スクリプトエラー」の警告メッセージをうんぬんしてエラーを消す方法、といった回答は求めていません。よろしくお願いします。

A 回答 (2件)

IEとホームページビルダーで同じJavaScriptコードが使えるかどうかは知らないのですが、他にも可能性があります。



「src="/../../cgi-bin/」 はヘンです。

そのケースは普通は「src="/cgi-bin/」と書くのが正解と思います。 状況によっては「src="../../cgi-bin/」かも知れませんが。(状況依存なので、私は正解を知り得ません)


1文字の「/」で始まるURLは、絶対URLからプロトコルやホスト名が省略されたものです。 つまり、現在参照中のWebサーバーのトップディレクトリからのパスですから、「..」でさらに上に上る事はできません。


規格では、トップディレクトリでの「../」は無視する様求められていたと思います。 つまり、ディレクトリ部先頭の「/」は「/../」や「/../../」と等価です。


ホームページビルダーだけうまくいかないとの事ですが、その時のホームページビルダーはIEがアクセスするのと同じサーバーにhttpアクセスするのですか? それとも、ローカルファイルにhttpを使わずにアクセスするのですか?

いずれの場合も、最初に書いととおり「/../../」をヘンでないURLにすると解決の可能性があります。

この回答への補足

ビルダーとIEと同じスクリプトが使えるのかどうか、という意味ではないです。
ビルダーのプレビュー画面はIEエンジンを使って表示しています。 つまりプレビュー画面といいつつ、その実はIEで表示しているだけです。

ですのでビルダーで書いている時にはエラーは出てこず、それをIEを使って表示する機能(プレビュー機能)の時にスクリプトエラーが出てくる、という意味です。

全く同じIEで表示してるのになんでビルダーだとスクリプトエラーになるの? この下記のスクリプトは間違ってるの? という質問です。

また頭の/については以下に追記しましたが、私が省略した時にミスしたものです。
<SCRIPT language="JavaScript1.2" src="../../../../../../../../../cgi-bin/counter.cgi?pg=abc"></SCRIPT>

が長いのですが正解です。

で、なんでこのスクリプトではエラーになってしまうのでしょう?間違っているスクリプトなのでしょうか?

補足日時:2010/01/21 22:59
    • good
    • 0

JavaとJava Scriptを、きちんと区別しましょうね。



さて、srcの後の""で囲まれた文字列の
先頭の/を削除してみてください。

不必要です。

尚、貴殿が書き換えた2つのスクリプトは、
全くもって無意味なものです。

この回答への補足

すみません。コピーの時に長い相対パスの../を幾つか省略する時に間違ってコピーしてしまいました。

正式には以下でした。

<SCRIPT language="JavaScript1.2" src="../../../../../../../../../cgi-bin/counter.cgi?pg=abc"></SCRIPT>

なのできちんとIEでの動作はするのです。
でもこのスクリプト自体はおかしくはないですよね? だったらなぜ、ビルダーのプレビュー画面(IEエンジン使用)ではエラーが出てくるのに同じIEではエラーにならないのでしょう?

私の書いた二つは意味をなさないとのことはわかりました。全くJavaのこと、わかっておりませんでした。

補足日時:2010/01/21 22:54
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!