WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:外部JavaScript内でのグローバル変数使用

0:[投稿] のぐりん [MAIL] [2002/12/26 14:48 ][環境:IE5.5以上 Windows全般 ASP IIS4.0以上]

ASP内で指定したグローバル変数を外部JavaScriptファイル内で使用とすると、変数名がそのまま、文字列として扱われます。
解決方法をご存知の方がいたら、ご教授願います。

○**.asp
<!-- #INCLUDE FILE="Message.inc" -->
<%
  :
%>
  :
<SCRIPT type="text/javascript" SRC="Common.JS"></SCRIPT>
<SCRIPT type="text/javascript">
  aaa();
  alert("<%=MG001%>"); //ここは、正常にMG001の内容が正しく表示される。
</SCRIPT>

○Message.inc
<%
  :
Const MG001 = "メッセージ"
  :
%>

○Common.JS
  :
alert("<%=MG001%>"); //これで、メッセージボックス内には<%=MG001%>が直接表示される。
  :


1:[回答] ふじ [URL] [2002/12/26 18:46 ]

Common.JS は ASP として実行されないからでしょう。

拡張子 JS のファイルについても、ASPとして実行させれば・・・と思いましたが、 **.asp と Common.JS は別々に実行されるので、
セッションを使うか何かしなければ変数を共有できなそうな気がします。
# ASP はよく知らないので、変なことを言っていたらすみません。

あ、変数の内容が実行時に変わったりしない、というのであれば
Common.JS (という名前の ASP ファイル) 内でも
Message.inc を include すればいいのか。


2:[回答] Yachimata [MAIL] [2002/12/26 18:55 ]

こんばんわ!

ふじさんのおっしゃる通りだと思います。
js は動的なものではないので、動的に値を受け取る事は出来ないのではないでしょうか。
関数を呼び出す時に引数等で渡してやるのが良いと思います。


3:[回答] のぐりん [MAIL] [2002/12/27 00:32 ]

ふじさん、Yachimataさん、回答ありがとうございます。

>Common.JS (という名前の ASP ファイル) 内でも
>Message.inc を include すればいいのか。
Common.JSは、ASPファイルでもHTMLファイルでもないので、
インクルードは使えません。

>js は動的なものではないので、動的に値を受け取る事は出来ないのではないでしょうか。
>関数を呼び出す時に引数等で渡してやるのが良いと思います。

Common.JS内の一部の関数で、メッセージ出力するところがあり、
Message.incはメッセージ内容をコード化して一元管理するファイルであり、
ASPで使用するメッセージ、JavaScriptで使用するメッセージ(共通もある)が書かれています。

Common.JS内のASP側の変数を使う関数を別インクルードファイルに移動させ、
インクルードする方法を検討中です。


4:[回答] ふじ [URL] [2002/12/27 06:24 ]

> Common.JSは、ASPファイルでもHTMLファイルでもないので、
> インクルードは使えません。
普通はそうですけど、「拡張子 JS」のファイルを ASP として
処理させることって、(IISの設定で) できませんか?

ASP として処理した場合でも、 <% %> で囲まれていない部分はスルーで
(なんの変更もされずに) 出力されると思うのですが。

# ただ、運用の都合でいえば、そういうイレギュラーな設定はしないほうが
# のちのちのため、とも思います。


もしくは、Common.JS のファイル名を Common.asp として、
ASP として処理してしまうとか。

クライアントにとっては、
・サーバサイドで ASP が実行された結果、JavaScript が出力されたもの
・素のテキストとして JavaScript が記述されたもの
の区別はつかないので、拡張子が JS でなくて asp でも問題ないはずです。

手元の環境で、

--- hoge.asp ---
alert("hoge");
----------------

--- hoge.html ---
<script type="text/javascript" src="hoge.asp">
</script>
-----------------

として IE6.0(Windows), NN7.0(Windows) で hoge.html を
読み込んでみましたが、問題なさそうです。

hoge.asp の Content-Typeは (Apache で実験したので)
text/plain でしたが、それでも問題なし。
気になるなら
Content-Type: application/x-javascript を出力すれば
を出力してやればいいと思います。


5:[完了] のぐりん [MAIL] [2002/12/27 21:52 ]

ふじさん、ご回答ありがとうございます。

試してみてないですが、
<script type="text/javascript" src="hoge.asp">
とやってみても、hoge.asp内でASPコードを書いても、
ASPは、動作しないと思います。

結論としては、
<script type="text/javascript" src="Common.JS">を止めて、
Common.JSをCommon.Incとファイル名を変え、
Common.IncのJavaScriptの関数の前後に<script type="text/javascript"></SCRIPT>を入れて、
<!-- #INCLUDE FILE="Common.inc" -->とすることにしました。

そうすると、**.Asp内にJavaScriptの関数を書いたのと、
同じ動きをし、目的の動作を満足させることが出来ました。



6:[完了] . [2002/12/28 23:57 ]

Webの通信においてファイル名(拡張子含む)は何の意味も無く、
本来ドキュメントヘッダーに応じた処理をするのがクライアントの
正常な動作のはず。
サーバー側の設定如何で、hoge.htmlなプレインテキストやhoge.txtな
HTMLの存在も可能。
よって、hoge.cgiなjavascriptファイルだろうが、hoge.cgiな画像
(普通のカウンターはこのタイプ)も実現(Apacheでは)できています。
ふじさんの言うとおり、<script type="text/javascript" src="hoge.asp">
や<script type="text/javascript" src="hoge.cgi"> で、動的にjavascript
ソースを吐いても全然おかしくないです。
ようはサーバー側の設定次第という事です。

ただし、HTMLが記述されたhoge.txtにplain/textのコンテントヘッダーを
受け取りながらHTMLを解釈するIEの動作は明らかなバグです。
これを仕様とするマイクロソフトなんでASPでこれが実現出来ない可能性も
十分考えられますが、ASPに詳しくないので明言できません。。。


7:[完了] --- [2002/12/29 22:31 ]

<scirpt type="text/javascript" src="hoge.js" runat="server"></script>


8:[完了] ひじ [2003/01/01 17:47 ]

ASPなのに、なぜ Response.ContentType プロパティが出てこないのだろうか。
http://www.microsoft.com/japan/developer/library/jpiis/iishelp/iis/asp/vbob67ol.htm


9:[完了] のぐりん [MAIL] [2003/01/04 02:42 ]

完了後の回答、ありがとうございます。

><scirpt type="text/javascript" src="hoge.js" runat="server"></script>
目的は、クライアント側のJavaScript共通関数で、サーバ側の変数を使うことです。
これだと、言語がJavaScriptになるだけで、ASPの関数になるので、
単純に置き換えは出来ないと思います。

>ASPなのに、なぜ Response.ContentType プロパティが出てこないのだろうか。

Response.ContentTypeは、そのファイルのContentTypeを何で出力するかのプロパティで、目的の、「クライアント側のJavaScript共通関数で、サーバ側の変数を使う」こととは、関係ないような気がします。
<script type="text/javascript" src="Common.JS">で使うCommon.JSないには、ASPのコードがそもそも書くことが出来ません。
だから、<!-- #INCLUDE FILE="Common.inc" -->に置き換えたのです。

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World