|
■No102963 (ASP初心者 さん) に返信 > JavascriptとVbscript混在のクラシックASPにおいて、 Classic ASP の構成としては: サーバーサイド VBScript、サーバーサイド JScript、 クライアントサイド VBScript、クライアントサイド JavaScript などの組み合わせが考えられるわけですが、今回の構成は サーバー側の処理が VBScript クライアント側は JavaScript のみの組み合わせだと思って良いのですよね? (念のための確認です)
クライアント側で VBScript を使うことは殆ど無くなりましたが(IE がほぼ駆逐されたため)、 それでもサーバー側で JScript(JavaScript) を併用することはありえるので、一応確認。
たとえば、VBScript 以外の言語機能(JScript の decodeURIComponent / encodeURIComponent など)を サーバー側で利用したい場合などに、ASP 内で <script runat="Server" language="JScript"> を使ったり、 あるいは .wsc なスクリプト XML を GetObject("script:X:\hoge.wsc") 経由でロードして利用するなど。
> その逆の、Javascript内で、Vbscriptで定義したワークへの値の受け渡し 仕組み上、どうあってもクライアント側からサーバーへの通信は発生することになりますが、 クライアント側から送られてきた情報は、サーバー側では Request オブジェクト経由で拾えます。
クライアント側から document.cookie で書き込んで、サーバー側では Request.Cookies("〜") で 読み取る方法などありますが…流石にこの目的だけのために cookie を使うの不自然ですね。
サーバーとの通常の通信ということで、普通の HTML ページのやり取りして <form> 等から submit して、Reqeust.Form("〜") で受けるとか、 URL のパラメーターに繋いでおいて、Request.QueryString("〜") で受けるといった 基本的なところから始めてみてはどうでしょう。この処理の流れは、 JS 側から XMLHttpRequest / ajax などでバックグラウンド通信する場合も同様です。
内容によっては、 XMLHttpRequest の .setRequestHeader("MY-HEADER", "value") で HTTP 要求ヘッダーに書き込んで送出し、サーバー側ではそれを = Request.ServerVariables("HTTP_MY_HEADER") で読み取るという手もあります。
> <script language="JavaScript"> > <!-- > strJAVA = "<% = strVBd %>"; > //--> > </script> > 上記で受け渡しを行えています。 それは簡略化したものですよね? 業務用途の場合には必ずしも十分とは言い切れないかと。 strVBd の中身に「"」や「\」などが混入していないことを保証できるなら構いませんが、 strVBd の中身が任意の文字列である場合は、何らかの無毒化処理(サニタイジング)が必要です。
とりあえず Replace 関数で特殊文字をエスケープ処理していた例。
<% 'rawString = "hoge" rawString = "<div>" & vbCrLf & "ho&ge ""TEST"" " & vbCrLf & "hoge \ hoge</div>"
htmlString = Server.HtmlEncode(rawString)
jsString = Replace(Replace(Replace(Replace(Replace(rawString, "\", "\\"), vbCr, "\r"), vbLf, "\n"), """", "\"""), "'", "\'");
%><textarea rows="10" cols="40"><% = htmlString %></textarea> <script language="JavaScript"> const strJAVA = "<% = jsString %>"; alert(strJAVA); </script>
上記では、改行や「\」などを含んだ文字列を、 JavaScript の変数や HTML の内容として出力しています。
そのために、Replace 関数を繰り返し使っていますが、実際には他にもエスケープ処理を 施すべき文字もありますし、流石にコードの可読性も悪くなってしまいます。
そのため、HTML 出力用の Server.HtmlEncode メソッドのように、実際の運用では JavaScript に渡すためのサニタイズ用関数を自作しておいた方が良いでしょう。
あるいはそもそも無毒化する必要が無いよう、変数値がとりうる範囲を仕様的に制限して、 そうした特殊文字が混入しないようにしておく(値の事前検査を施すなど)のも有効です。
|