- PR -

Flashのボタンから配置元Javascriptを呼びたい

1
投稿者投稿内容
未記入
大ベテラン
会議室デビュー日: 2008/07/11
投稿数: 182
投稿日時: 2008-10-30 11:56
こんにちは。

WinXP-SP3 & struts2 & Tomcat5.5 & FlexBuilder3で開発しています。
Flashの入力欄から同じFlashのボタンで押下されたら、Flashの配置した
画面に定義したJavascriptを呼びたいのですが、可能でしょうか?

または、Flash上にはボタンを配置せず、Flashを配置する画面のボタンから
Flashの入力欄のデータが取れる方法でもいいのですが。

WEBで探すとXML形式で送信する方法が一般的のようですが、
Javascriptにデータを受け渡す方法を模索しております。

Flashのバージョンは9.0.28です。
お分かりになりましたら、よろしくお願いします。
ぴあちゃん
ぬし
会議室デビュー日: 2008/02/07
投稿数: 287
投稿日時: 2008-10-30 12:35
getURL("javascript:void(originalJSFunction(" + 渡したい変数 + "))");

こんなんでいけなかったっけかな?


http://www.1art.jp/flash/le/lesson20/lesson20.htm

未記入
大ベテラン
会議室デビュー日: 2008/07/11
投稿数: 182
投稿日時: 2008-10-30 14:21
ぴあちゃんさん、ありがとうございます。

教えていただいたgetURLからこのページにたどり着き
http://www.ark-web.jp/blog/archives/2008/05/javascriptflash_externalinterface.html

テストページではうまく、受けわたりました。

ただ、実際に実装をした場合、うまく受けわたりません。
FireBugを使っていますが、特にScriptエラーも出ておらず・・、原因が分かりません。

・親画面Script
<script>
var so = new SWFObject("http://XXXX/app/Test.swf", "flash_area", "470", "400", "8", "#FFFFFF");
so.write("flash_area"); //Flashの配置

panelObj.receive_from_flash = function(oObject) {
alert("OK");
};
panelObj.cancel_from_flash = function() {
alert("cancel");
};
</script>
<div id = "flash_area"></div>

・Flash
<mx:Button click="postdata();">
<mx:Script>
<![CDATA[
private function postdata():void {
import flash.external.*;
var oObject:Object = {test1:'test'};
ExternalInterface.call("receive_from_flash", oObject);
}
]]>
</mx:Script>
</mx:Button>
<mx:Button click="cancelform();">
<mx:Script>
<![CDATA[
private function cancelform():void {
import flash.external.*;
ExternalInterface.call("cancel_from_flash", "");
}
]]>
</mx:Script>
</mx:Button>

このように指定しているのですが、親画面Scriptに到達していません。
テストページでうまく行った所と比べて違う点は、Tomcatのサーバ上で起動している点とJavascriptのfunctionの記述の仕方が違う点ですが、「function cancel_from_flash(obj)」とテストページ上の書式にしても同じように、親画面のfunctionにたどり着いていません。

アドバイスいただければ幸いです。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2008-10-30 22:08
コード:
ExternalInterface.call("receive_from_flash", oObject);


と呼び出していますが、receive_from_flashという名前で関数が見つかっていないのでは?
その関数はpanelObjという名前のオブジェクトに含まれていますよね。
参考にされているサンプルはグローバルで定義している関数だと思われます。
だから、Flashから見えているのでしょう。

試したわけでは有りませんが、
コード:
ExternalInterface.call("panelObj.receive_from_flash", oObject);


で、できたりしませんか。
(この辺は手元に環境もなく、やったことがないので何とも言えません。)
未記入
大ベテラン
会議室デビュー日: 2008/07/11
投稿数: 182
投稿日時: 2008-10-31 00:17
かつのりさん、ありがとうございます。

おっしゃるようにした所、うまく受けわたるようになりました。
Flashを呼び出す時も同ディレクトリにswfファイルを置いても認識せず、URLからのフルパスから記述しないと認識しなかったので、同じように元ファイルをそのように辿らなければいけないと思ってましたが、ありがとうございました。

本当に助かりました。
1

スキルアップ/キャリアアップ(JOB@IT)