Вероятно, это не имеет отношения к движку приложений Google как таковому, поскольку все это работает в браузере - если только вы не упомянули какую-либо зависимость от сервера. Если предположить, что это не так ...
Если вы можете заставить Flash вызывать JavaScript с помощью ExternalInterface.call (), но не JavaScript для обратного вызова во Flash, то это, вероятно, одна или две вещи: ваш обратный вызов 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 не уведомит
браузер готов начать получать
звонки (как указано моим
Метод callbacksInitialized ()).
- Тест, чтобы убедиться, что вы используете
соответствующий специфичный для браузера объект
ссылка (например, окно ["HelloMac"]
против документа ["HelloMac"]).
Не зная больше, я предполагаю, что это один из этих двух предметов, так как это был мой опыт. Надеюсь, поможет! Я буду следить за сообщением о последующих мероприятиях на случай, если они у вас есть.