さぁ(2)です!
今日は実際にFlashのgetURL()にJavaScriptを記述するとこからです。
まず、俺の環境を紹介。
VistaなのでIEのバージョンは7です。
FLASHはバージョン8のPro。
で、まずはHTMLやらJavaScriptやらを全部埋め込む方法でやってみました。
var js:String;
js = ‘javascript:’;
js += ‘body = document.body;’;
js += ‘var ce_div = document.createElement(”div”);’;
js += ‘ce_div.setAttribute(”id”, “sdiv”);’;
js += ‘var ce_form = document.createElement(”form”);’;
js += ‘ce_form.setAttribute(”id”, “forms”);’;
js += ‘ce_form.setAttribute(”name”, “forms”);’;
js += ‘ce_form.setAttribute(”method”, “POST”);’;
js += ‘ce_form.setAttribute(”action”, “./test.php”);’;
js += ‘ce_form.setAttribute(”target”, “_blank”);’;
js += ‘var ce_input = document.createElement(”input”);’;
js += ‘ce_input.setAttribute(”id”, “hide”);’;
js += ‘ce_input.setAttribute(”name”, “hide”);’;
js += ‘ce_input.setAttribute(”type”, “hidden”);’;
js += ‘ce_input.setAttribute(”value”, “TestMessage”);’;
js += ‘body.appendChild(ce_div);’;
js += ‘ce_div.appendChild(ce_form);’;
js += ‘ce_form.appendChild(ce_input);’;
js += ‘document.getElementById(”forms”).submit();’;
getURL(js, ‘_self’, ‘POST’);
こんな感じになるのです。
軽く説明しますと
createElement はタグを生成するもの。
<form></form>
setAttribute はタグに属性を追加するもの。
<form
id=”forms”></form>
appendChild はタグの間にタグを入れるもの(だと思っている)。
<form>
<input></input></form>
という感じで最後にJavaScriptで./test.phpへinputタグの”TestMessage”をPOSTでSubmitして終了という流れです。
受け取り側のPHPは$_POST["hide"]で受け取るようにしています。

IE7動いた!!
Fox1.5と2もバッチリ動いたっ!ちゃんとデータも行き渡ってる!
フォーー!感激したっ!!が、
しかしやっぱり問題が。。。
まず、IE6が不動(´-`)・・・。
Foxで
POPUP扱いになっちゃってPOPUPブロックメッセージが吐かれるんです。
で、FoxのJavaScriptコンソールを見ると・・・。
エラー: uncaught exception: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIDOMHTMLFormElement.submit]” nsresult: “0×80004005 (NS_ERROR_FAILURE)”
location: “JS frame :: javascript:body = document.body;
var ce_div = document.createElement(”div”);
var ce_form = document.createElement(”form”);
ce_form.setAttribute(”id”, “forms”);
ce_form.setAttribute(”name”, “forms”);
ce_form.setAttribute(”method”, “POST”);
ce_form.setAttribute(”action”, “./test.php”);
ce_form.setAttribute(”target”, “_blank”);
var ce_input = document.createElement(”input”);
ce_input.setAttribute(”id”, “hide”);
ce_input.setAttribute(”name”, “hide”);
ce_input.setAttribute(”type”, “hidden”);
ce_input.setAttribute(”value”, “TestMessage”);
body.appendChild(ce_div);
ce_div.appendChild(ce_form);
ce_form.appendChild(ce_input);
document.getElementById(”forms”).submit();
:: <TOP_LEVEL> :: line 1″ data: no]
あ゛ぁぁぁぁ!
もろバレです(´Д`)
POSTしてる内容全部見えすぎっ!!
というわけで原因を調べてみたところ
js += ‘document.getElementById(”forms”).submit();’;
こいつをFLASH側に書いてるのが問題らしい。
でも、とりあえずsubmitはできるように関数化して、最初の部分に
js += ‘function btnPress(){ document.getElementById(”forms”).submit();};’;
を書いて
js += ‘btnPress();’;
を最後に追加して実行してみたが同じ事だった。
関数化しても同じカー・・・。まぁそりゃそうだよなぁ。
というわけで、HTML側にJavaScriptを記述しました。
<script type=”text/javascript”>
<!–
function btnPress(){
document.getElementById(”forms”).submit();
}
// –>
</script>
をHTML側に書きまして。実行したところFoxのPOPUPブロックメッセージがこう変わりました。
エラー: uncaught exception: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIDOMHTMLFormElement.submit]” nsresult: “0×80004005 (NS_ERROR_FAILURE)” location: “JS frame :: http://localhost/posttest/posttest.html :: btnPress :: line 9″ data: no]
キタ━━━ヽ(∀゚ )人(゚∀゚)人( ゚∀)人
さっき見えてたPOSTデータやら色々なメッセージ見えなくなりました!!
どうやらSubmitのJavaScriptをHTML側に書いてるとOKっぽい!!
しかしIE6は相変わらず不動。
今日の検証結果
| | IE7 | IE6 | Fox1.5 | Fox2 |
| Flash側にすべてのスクリプトを埋め込む | 異常なし | 動作しない | 動作するがPOPUPブロックメッセージでPOSTの内容が分かる | 動作するがPOPUPブロックメッセージでPOSTの内容が分かる |
| HTML側のJavaScriptにsubmitスクリプトを埋め込む | 異常なし | 動作しない | POPUPブロックメッセージが表示されPOSTの内容は分からない | POPUPブロックメッセージが表示されPOSTの内容は分からない |
検証結果を見ると、IE6ではこの方法は駄目で、Foxはバージョンに関係なく動作するがポップアップ扱いになりブロックメッセージが表示されることが分かった。
IE6で動かないとなると話にならないので別のやり方で検証しようと思う。
FoxはgetURL()の_blankでうまくPOSTする事が可能なので、Flash側にブラウザをチェックする関数を入れて通常のgetURL()でやる方法も考えたが今回はパスしようと思う。
というわけで、今日はここまで。
すべてをFlash側に書くのは駄目だと判っただけでも十分!
次回、getURLでのPOSTを意地でやってみる(3)はIE6の対応と完成形に向けて条件を絞り込んでいきます。
ついでに、今日のスクリプトを書いておく。
/*—– HTML側 —–*/
<script type=”text/javascript”>
<!–
function btnPress(){
document.getElementById(”forms”).submit();
}
// –>
</script>
/*—– FLASH側 —–*/
test_btn.onPress = function(){
var js:String;
js = ‘javascript:’;
js += ‘body = document.body;’;
js += ‘var ce_div = document.createElement(”div”);’;
js += ‘var ce_form = document.createElement(”form”);’;
js += ‘ce_form.setAttribute(”id”, “forms”);’;
js += ‘ce_form.setAttribute(”name”, “forms”);’;
js += ‘ce_form.setAttribute(”method”, “POST”);’;
js += ‘ce_form.setAttribute(”action”, “./test.php”);’;
js += ‘ce_form.setAttribute(”target”, “_blank”);’;
js += ‘var ce_input = document.createElement(”input”);’;
js += ‘ce_input.setAttribute(”id”, “hide”);’;
js += ‘ce_input.setAttribute(”name”, “hide”);’;
js += ‘ce_input.setAttribute(”type”, “hidden”);’;
js += ‘ce_input.setAttribute(”value”, “TestMessage”);’;
js += ‘body.appendChild(ce_div);’;
js += ‘ce_div.appendChild(ce_form);’;
js += ‘ce_form.appendChild(ce_input);’;
js += ‘btnPress();’;
getURL(js, ‘_self’, ‘POST’);
}
2007/7/12 - 23:27
|
コメント (3) |
トラックバック(0)
Category : FLASH AS2
TrackBack : http://nashiko.net/blog/805/trackback