standard how google engine deploy appengine app javascript flash google-app-engine
http://blog.circlecube.com/wp-content/uploads/2008/02/ActionscriptJavascriptCommunication.zip

javascript - how - deploy app to app engine



Problema con Flash ExternalInterface en Google App Engine (3)

He estado luchando con esto durante las últimas dos horas y realmente no sé qué podría estar mal. Simplemente intento obtener Javascript para comunicar texto con Flash. Encontré este gran ejemplo con esta fuente

http://blog.circlecube.com/wp-content/uploads/2008/02/ActionscriptJavascriptCommunication.zip

Ejecuté el archivo html localmente y funciona muy bien enviando y recuperando texto de flash. Luego, cargué la misma muestra exacta en mi servidor de la aplicación dev google y no puedo enviar el texto de javascript a flash. Por extraño que parezca, el flash puede enviar texto en Javascript. ¿Alguien puede ver si pueden ejecutar esto con GAE? ¡Un millón de gracias!


Probablemente no tenga que ver con el motor de la aplicación de Google per se, ya que todo se ejecuta en el navegador, a menos que haya algún tipo de dependencia del servidor en algún lugar que no haya mencionado. Asumiendo que ese no es el caso ...

Si puede obtener Flash para llamar a JavaScript con ExternalInterface.call (), pero no JavaScript para volver a llamar a Flash, es probable que sea una o dos cosas: su devolución de llamada y manejador de EI no están conectados correctamente (en Flash ), o su JavaScript no tiene un control sobre el objeto SWF en el navegador.

Puede intentar publicar algún código, pero mientras tanto, he aquí algo que sé que funciona tanto en IE como en Firefox. Primero, el código del navegador:

<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>

Y ahora, el código de Flash (en mi caso, es Flex, así que con suerte está claro):

<?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>

El ejemplo demuestra llamadas Flash en JavaScript con algo de texto, y JavaScript llamando a Flash de la misma manera. Algunos puntos para prestar atención:

  • Asegúrese de esperar para llamar a Flash hasta que Flash haya notificado al navegador que está listo para comenzar a recibir llamadas (como lo indica mi método callbacksInitialized ()).
  • Realice una prueba para asegurarse de estar utilizando la referencia de objeto específica del navegador adecuada (por ejemplo, ventana ["HelloMac"] vs. documento ["HelloMac"]).

Sin saber más, supongo que es uno de estos dos elementos, ya que esa ha sido mi experiencia. ¡Espero eso ayude! Estaré pendiente de la publicación para seguimientos en caso de que tenga alguna.


Sí, la respuesta de Christian Nunciato es útil. El problema es que su archivo swf no está disponible para javascript en el momento en que su javascript llama a la función de flash. El truco de Christian asegura que el archivo swf se carga y se inicia cuando tu javascript lo necesita.


No veo una llamada a la función allowDomain en su código. Sin embargo, el entorno limitado de seguridad no permitirá que su aplicación flash se comunique con flash y viceversa en el servidor. Agregue una llamada a System.security.allowDomain("mydomain.com", "mySecondDomain.com", "etc.com") para cada dominio en el que se ejecutará la aplicación flash. Además, el código de inserción también necesita especificar el acceso para JavaScript al incluir el parámetro <param name="allowScriptAccess" value="always" /> .