- ベストアンサー
FLASHからアプリケーションの呼出し
- お知恵を拝借したく、メール送信用に作成されたプログラムを起動させるためにFLASHからアプリケーションの呼出しを試みています。
- sendmail.aspというvbscriptで記述されたプログラムを呼び出すことができますが、パラメーターが正しく渡されていません。
- サーバーを通さずに動作させた場合、ブラウザが立ち上がりますが、アドレスバーにはパラメーターが表示されません。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
VBScript には詳しくありませんので、分かる範囲で回答させていただきます。 ASPについて不明な点がありましたら、「 Microsoft ASP 」カテゴリーで質問してみてください。詳しい方から回答がいただけると思います。 #3の補足欄のプログラムは、見たところ、受け取ったデータをメールの形に加工し、配信する部分と思われます。 GET か POST かを見分けるには、この1歩手前の、送信されてきたデータそのものをASPプログラムが参照する部分を重点的に見てください。 ただ、メール配信プログラムとのことですので、送信メソッドはやはり、GET ではなく POST だと思います。 差出人やメールアドレスなど、ユーザーから送られてくるデータを扱っているのは、 name = Request.Form("P_name") mail = Request.Form("P_mail") : この箇所だと思います。 Request.Form に P_*** という名前のパラメータを渡して、参照していますよね。おそらく入力フォームに割り振られた変数の名前で、この名前を元にデータを受信しているのではないでしょうか。 とすると、Flash で送信する変数も P_*** という名前でなければ、このプログラムに情報を渡せないことになります。 先の回答に書きました通り、getURL で必要な変数だけ送信するには、専用のムービークリップを作り、これに変数を設定して送信する必要があります。 LoadVars クラスを利用すると、もっとスマートに送信用の情報を準備できます。 例えば、「送信」ボタンがあるとしますと、 on(release) { //オブジェクトの生成 mail = new LoadVars(); //送信する情報の準備 mail.P_name = result1; mail.P_mail = result2; mail.P_kenmei = result3; mail.P_naiyo = result4; //情報を送信 mail.send( "./sendmail.asp" , "_blank" , "POST" ); } ASP側で使っていると思われる P_*** という名前のパラメータに、Flash で使っている変数 result1 ~ 4 の内容を設定し、ASPプログラムに情報を送信するという意味になります。 もちろん、「送信」ボタンをムービークリップにし、P_*** という名前の変数を用意して、この階層で getURL を実行しても、同様に情報を送信することができます。 言うまでもないことですけど・・・ 呼び出すプログラムのパスや変数のターゲットパスの誤りなど、些細なミスにはくれぐれもご注意ください。
その他の回答 (3)
- DPE
- ベストアンサー率85% (666/776)
プログラムがどちらのメソッドに対応しているかは、プログラムの開発者でなければ分かりません。 しかし、getURL の第3引数に "GET" を指定してプログラムにパラメータが正常に渡れば GET 、GET ではうまくいかなくても "POST" なら渡るのであれば POST に対応していると言えます。 アドレスに ? でパラメータを連結する書き方は、GET で送信する時の特徴です。この記述で呼び出すように指示があったのでしたら、GET にも対応しています。 URLからも分かるように、この OKWeb サイトではPHPを利用しています。変数 q に質問番号を入れると、該当する質問を閲覧できます。 このプログラムを拝借して、ちょっとした実験してみますと。 ステージにボタンのインスタンスを1つ、用意します。 フレーム1に q = 1081049; ボタンに on(press) { getURL( "http://okweb.jp/kotaeru.php3" , "_blank" , "GET" ); } このようなアクションを設定して、動作を確認してみてください。新しいウィンドウが開き、この質問のページが表示されます。 では、getURL の第3引数を "POST" に変更すると、どうなるでしょうか。「ムービープレビュー」ではスクリプトに関係なく、必ず GET メソッドで送信されてしまいます。パブリッシュして HTML ファイルを作り、ブラウザで確認してください。 この時、アドレスバーに注目してください。? 以降は表示されませんが、PHPプログラムにはきちんとパラメータが渡っています。 GET でも POST でも変数が送信できるのですから、つまり、このプログラムは GET にも POST にも対応していると言えます。 なぜ、Flash で変数 q に番号を入れ、getURL で送信すると任意の質問が閲覧できると分かったか・・・それは、アドレスに ? で q というパラメータが連結されていて、q の中身が質問の番号に対応しているからですね。 GET はアドレスにパラメータをつなげるだけで利用できて手軽な反面、プログラムで使っているパラメータや送信する内容が、他者に知られてしまうという欠点があります。 質問の番号や検索のキーワード程度ならまだしも、これが氏名やメールアドレスなどの個人情報だったら、個人情報の漏洩にもつながりかねません。 また、例えばこの回答を GET で送信する、つまり、アドレスに ? で情報をつばげて送信しようとすると、どうなるでしょうか?日本語は直接送信できない問題もありますが、何より、アドレスバーに表示するには字数が多すぎますよね。 アドレスに連結して渡すために、あまり大きな情報は送信できないことも、GET メソッドの欠点です。掲示板の投稿のように、容量が大きくなると予想される情報を送信するには、普通は POST メソッドが利用されます。 呼び出そうとしているASPプログラムは、おそらく、メールを送信するプログラムではないでしょうか。 それでしたら、プライバシーの保護と容量の問題から、POST メソッドにのみの対応である可能性も考えられると思います。
補足
'送信メールの編集 dim strBody dim strSubject dim MailSendFlg dim CustomerCenterMailAddress dim name dim mail dim kenmei dim naiyo name = Request.Form("P_name") mail = Request.Form("P_mail") kenmei = Request.Form("P_kenmei") naiyo = Request.Form("P_naiyo") strBody="" strBody=strBody & "[お問い合わせ]" & chr(13) strBody=strBody & "お名前: " & name & chr(13) strBody=strBody & "Email: " & mail & chr(13) strBody=strBody & "件名: " &kenmei & chr(13) strBody=strBody & "内容: " &naiyo dim CDoObject Set CDoObject=CreateObject("CDONTS.NewMail") CDoObject.MailFormat = 1 'TEXT format(default) CDoObject.From = "contact@xxxxxxnet.co.jp" CDoObject.To = "contact@xxxxxxnet.co.jp" CDoObject.Subject = "お問い合わせ" CDoObject.Body = strBody CDoObject.Importance = 2 '0:low 1:normal 2:high ''if isNull(strAttachFile) = False then 'strAttachFile は 絶対パス ''CDoObject.AttachFile(strAttachFile) ''end if CDoObject.Send if err.number <> 0 then CDO_NewMail=false CDO_NewMail=Err.Description end if Set CdoObject=nothing Response.Redirect ("default.htm") %> apsプログラムは上記です。これを作成した者が既に居ないという事と、私がプログラムを全く知らないと言う事で、これを見てお分かりになるようであれば教えてください。 どうぞ宜しく御願いします。
- DPE
- ベストアンサー率85% (666/776)
> 「getURL を実行した階層のタイムラインにある変数を全て送信します。」と言うのは、getURLが記述されているフレームで定義・使用されている変数が全て送信されるという事でしょうか?。(”GET"を付けた場合) その通りです。getURL が記述されているフレームどころか、階層に存在する全ての変数が送信されます。 送信メソッドが GET だからなのではなく、getURL がそのような仕様になっているためです。 例えば _root 階層にムービークリップAとBがあり、それぞれに a1 ・ a2 ・ a3 と b1 という変数があるとします。 ムービークリップAで getURL を、第3引数に GET か POST を指定して実行すると、アドレスに ? で連結しなくても a1 ~ 3 が送信されます。 しかし、_root 階層で実行した場合は、a1 ~ 3 も b1 も送信されません。また、ムービークリップBで実行した時は、b1 だけが送信されます。 これは getURL の特徴で、メソッドが GET でも POST でも同じです。 ヘルプの getURL の項目で紹介されている例を見ていただくと分かりますが・・・ この例では、メソッドが GET でも POST でもURLの後にパラメータは連結されていませんが、それでも変数は送信されます。 それぞれの送信メソッドの特徴により、GET で送信した時はアドレスに?でパラメータが続きますが、POST で送信すると、アドレスバーにはURLだけが表示され、パラメータは見えなくなります。 GET と POST とでは送られてきたデータが格納される場所が違うので、データを処理する方法も変わります。これはデータを受け取る側、つまりCGIやASPの方の問題になります。 大抵はどちらでも対応できるようにプログラムを組むものですが、もし、呼び出すASPプログラムが POST メソッドにしか対応していないのならば、getURL では POST で送信しなければなりません。 LoadVars クラスがなかった Flash 5 では、CGIなどに情報を送るには getURL しか使えませんでした。 「 getURL を実行する階層にある全ての変数が送信される」とは、送信する必要のないものまで勝手に送信されるということでもあり、不便といえば不便です。 ですが、この特徴を逆に利用して、予め送信用のムービークリップを作り、ここに送信したい変数をコピーしておけば、必要なものだけを送信できることになります。普通は「送信」ボタンなどを用意しますから、これを独立したムービークリップにして、そこに送信したい変数を用意する、といった方法が、ポピュラーなパターンです。 Flash MX からは、ザーバーとの変数の送受信を専門に担当する LoadVars クラスが登場し、いちいちムービークリップを用意して変数をコピーすることなく、スクリプトだけでも送受信の準備を済ませられるようになりました。 param1 ~ 4 という変数を用意し、それぞれに result1 ~ 4 の中身を代入して、 getURL("./sendmail.asp" , "_blank" , "GET" ); 相対アドレスになっていますから、サーバーにアップして確認してみてください。 また、相対アドレスではなく http:// から書く絶対アドレスにした場合は、いかがでしょう。 それでもパラメータが渡りませんでしょうか?
補足
ムービークリップは別のタイムラインを持っているから、と言うわけですね。 ムービークリップのアクションに変数や「getURL」を記述すれば、送信したい変数だけをサーバーに送れるのですね。 「サーバー側のプログラムの問題」と言う事ですが、GETメソッドに対応している、POSTメソッドに対応していると言うのは、何を確認すれば分かりますか?。 どうぞ宜しく御願いします。
- DPE
- ベストアンサー率85% (666/776)
サーバーと連携する作品の場合は、なるべくオンライン環境(サーバーにアップする・ネットにつなぐ、など)で動作確認することをオススメします。 オフライン・ローカル環境ではうまくいかなくても、オンラインでは正常に動く場合もありますよ。 ちなみに、以前、こんな質問もありましたので、ご参考までに。 ・"?"を認識させるには? http://okweb.jp/kotaeru.php3?q=1005589 PHPというCGIの話ですが、スクリプトの問題ではなく、単に、オフラインで動作確認していたことが原因だったそうです。 文字列と変数を連結したアドレスを getURL に渡し、PHPを呼び出そうとしたところ、? 以降が消えるという現象が、今回のケースとよく似ていると思います。
補足
DPEさん、 オフラインだと正しく動作しない事は聞いておりましたので、サーバー経由でも試しましたが駄目でした。 システム担当曰く、「オフラインでパラメーターが渡っていないのだから、FLASH側の問題なんじゃないか。」との事です。 そこで質問です。 「getURL を実行した階層のタイムラインにある変数を全て送信します。」と言うのは、getURLが記述されているフレームで定義・使用されている変数が全て送信されるという事でしょうか?。(”GET"を付けた場合) 私は、変数定義やFunctionの定義は出来る限り1フレーム目にまとめて記述するようにしているので、そこで定義した変数は全て送信されてしまうと言う事でしょうか?。 ”GET"とは、そう言う意味(変数をすべて送信)だったのですか?。 どうぞ宜しく御願いします。
お礼
DPEさん、 getURLではうまく動かなかったのですが、教えて頂いたsendにて実行したら正しくパラメーターが受け渡されている事が確認出来ました。 ありがとうございます。