En mi aplicación Flex, necesito un control de Javascript para llamar a uno de mis métodos ActionScript. Bastante simple, de acuerdo con la documentación de Flex/ActionScript, escribí esto en mi código ActionScript:ExternalInterface.addCallback Actionscript solo funciona localmente, no en producción
if (ExternalInterface.available)
ExternalInterface.addCallback("setName", setNameInActiveWindow);
En el control Javascript escribí:
document.getElementById('FlexAppId').setName(name);
funciona muy bien. Exactamente como se esperaba, así que fui a la producción. Pero no funciona en producción :(. Mismo código exacto ... No puedo resolverlo. Se ejecuta el código JavaScript anterior, pero la devolución de llamada no se ejecuta en el código de Actionscript.
Tiene esto ¿Tiene algo que ver con la seguridad del dominio? Localmente, estoy usando local.mydomain.com:8080 donde local.midominio.com resuelve a 127.0.0.1 (tengo que hacer esto para que algunos widgets funcionen correctamente). Y la aplicación Flex viene de el mismo servidor web local. En producción, sin embargo, solo es www.midominio.com (mydomain.com no es el nombre de dominio real) y la aplicación Flex proviene de flash.midominio.com (un CDN).
Tengo un archivo crossdomain.xml en www.midominio.com:
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<site-control permitted-cross-domain-policies="master-only"/>
<allow-access-from domain="*.mydomain.com"/>
</cross-domain-policy>
ACTUALIZACIÓN: Intenté cambiar el entorno local para que la aplicación Flex esté referenciada desde flash.mydomain.com, al igual que en la producción. Resulta que también tengo el mismo problema localmente ... así que parece que este es un tipo de problema de seguridad del dominio a pesar del archivo crossdomain.xml que tengo arriba. ¿Debo cambiar algo en mi crossdomain.xml? ¿Hay algo adicional que necesito para que ExternalInterface.addCallback
funcione?
ACTUALIZACIÓN 2: ¡Lo tengo que hacer! Tenía que hacer tanto Security.allowDomain("*")
como Security.allowInsecureDomain("*")
. Al configurarlo en flash.mydomain.com NO solucionó el problema, tuve que poner un comodín. allowNetworking
no tuvo ningún efecto. Necesito allowScriptAccess="always"
, pero tuve eso de antes. Llamar a Javascript con ExternalInterface.call
funciona fácilmente con solo ese parámetro. Pero agregar una devolución de llamada con ExternalInterface.addCallback
requiere los métodos de seguridad anteriores con un comodín.
/crossdomain.xml no debería importar. ¿Su html también está en el servidor o es el html local y está cargando un swf de forma remota? – greggreg
localmente, el html y el flash vienen de local.midominio.com:8080. De forma remota, el html proviene de www.midominio.com y el flash proviene de flash.midominio.com. Cuando cambio la ubicación del flash localmente a flash.mydomain.com, aparece el mismo problema, las devoluciones de llamadas ya no funcionan. –
¿Cuál es el valor del parametro allowScriptAccess en el HTML de al lado que incorpora su aplicación Flex? –