すべてがブラウザで実行されているため、おそらくGoogleアプリエンジン自体とは関係ありません-あなたが言及していないサーバー依存関係がどこかにない限り. そうでないと仮定すると…
ExternalInterface.call() を使用して Flash を JavaScript に呼び出すことができるが、JavaScript に Flash にコールバックさせることができない場合は、おそらく 1 つまたは 2 つの原因があります: EI コールバックとハンドラーが適切に接続されていません (Flash で) )、または JavaScript がブラウザー内の SWF オブジェクトのハンドルを持っていません。
いくつかのコードを投稿してみるかもしれませんが、それまでの間、IE と FireFox の両方で動作することがわかっているものを次に示します。まず、ブラウザ コード:
<html>
<head>
<script language="JavaScript" type="text/javascript">
var swfReady = false;
function callbacksInitialized()
{
swfReady = true;
}
function helloFlash()
{
if (swfReady)
{
// Get a handle on the Flash object
var swfObject = navigator.appName.indexOf("Microsoft") != -1 ? window["HelloMac"] : document["HelloMac"] ;
// Call back into the Flash file
swfObject.helloFlash(document.getElementById("txtMessage").value);
}
}
function helloMac(message)
{
alert(message);
}
</script>
</head>
<body scroll="no">
<div align="center">
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
id="HelloMac" width="600" height="300"
codebase="http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab">
<param name="movie" value="HelloMac.swf" />
<param name="quality" value="high" />
<param name="bgcolor" value="#869ca7" />
<param name="allowScriptAccess" value="sameDomain" />
<embed src="HelloMac.swf" quality="high" bgcolor="#869ca7"
width="600" height="300" name="HelloMac" align="middle"
play="true"
loop="false"
quality="high"
allowScriptAccess="sameDomain"
type="application/x-shockwave-flash"
pluginspage="http://www.adobe.com/go/getflashplayer">
</embed>
</object>
<br /><br />
<input type="text" id="txtMessage" value="Hello, Flash!" /><br />
<input id="btnSend" type="button" value="Send to Flash" onclick="helloFlash();" />
</div>
</body>
</html>
そして今、Flashコード(私の場合はFlexなので、うまくいけば明らかです):
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" initialize="init()" height="300" width="600">
<mx:Script>
<![CDATA[
import mx.controls.Alert;
import flash.external.ExternalInterface;
private function init():void
{
addCallbacks();
}
private function addCallbacks():void
{
ExternalInterface.addCallback("helloFlash", this_helloFlash);
ExternalInterface.call("callbacksInitialized");
}
// Display a message from the host
private function this_helloFlash(message:String):void
{
Alert.show(message);
}
// Send a string to the host
private function helloMac():void
{
if (ExternalInterface.available)
{
ExternalInterface.call("helloMac", txtMessage.text);
}
}
]]>
</mx:Script>
<mx:VBox horizontalCenter="0" verticalCenter="0">
<mx:TextInput id="txtMessage" text="Hello, Mac!" />
<mx:Button id="btnSend" label="Send to Host" click="helloMac()" />
</mx:VBox>
</mx:Application>
この例では、Flash がテキストを使用して JavaScript を呼び出し、JavaScript が同じ方法で Flash を呼び出していることを示しています。注意すべき点:
- Flash が呼び出しの受信を開始する準備ができていることをブラウザーに通知するまで、Flash への呼び出しを待機してください(私の callbacksInitialized() メソッドで示されます)。
- 適切なブラウザー固有のオブジェクト参照 (window["HelloMac"] と document["HelloMac"] など) を使用していることを確認してください。
詳細はわかりませんが、私の経験から、この 2 つの項目のいずれかであると推測しています。それが役に立てば幸い!フォローアップがある場合に備えて、投稿を監視します。