2009-01-16 13 views
8

¿Cómo abro la 'seguridad entre dominios', por lo que el JavaScript de la página puede comunicarse libremente con el SWF, incluso cuando está alojado en otro dominio?¿Cómo hacer comunicación entre dominios entre JavaScript y Flash?

que sé con certeza que esta comunicación se bloquea la función por defecto, sino por jugar con un archivo llamado "crossdomain.xml" y la función de ActionScript 3: System.security.allowDomain ("*"). Sin embargo, no estoy teniendo éxito completo, y no tengo la idea de saber cuál se está abriendo para qué.

¿Hay otras capas de seguridad ocultas, que tengo que pensar en este escenario?

¿Y estoy abriendo mi código para posibles hackers de alguna manera al hacer esta configuración?

(y en caso de que se esté preguntando: Sí, lo tengo para hacer este trabajo en un escenario, donde el HTML se encuentra alojado en un dominio, se añade el JavaScript externamente desde otro dominio y el SWF se incorpora por el JavaScript de un tercer dominio; no preguntes por qué; es demasiado complicado de explicar; yo también me gustaría poder alojar todo en un dominio).

Respuesta

17

El uso de Security.allowDomain("www.example.com") en el SWF permitirá a JS en una página de www.example.com llamar a las funciones expuestas en el SWF con ExternalInterface.addCallback(). El dominio y el subdominio deben coincidir exactamente. Usar "*" permitirá que cualquier dominio se comunique con el SWF, pero si tiene un dominio específico, es mejor usarlo.

Configuración allowScriptAccess a en always en el código HTML insertado permitirá que el SWF llame a las funciones de JavaScript.

Una cosa que atrapa a muchos desarrolladores es que JavaScript no podrá invocar funciones en el SWF hasta que el SWF termine de cargarse. Lamentablemente, no existe un evento basado en JS que le indique cuándo está listo el SWF (al menos eso he encontrado). Lo que suelo hacer para evitar este problema es llamar a una función JS del SWF inmediatamente cuando el archivo SWF termine de cargarse para notificar a la página que el SWF está listo.

Hay algo de abstracción aquí y allá, pero si echa un vistazo al código fuente de YUI Charts, tal vez pueda averiguar cómo Yahoo! consiguió la comunicación entre dominios JS/SWF funcionando.

+0

He estado buscando por lo que parece horas, y esto es, con mucho, el mejor explicación que he encontrado. ¡Gracias por explicar con claridad! – zombat

+0

Muchas gracias – simo

1

Una cosa que agregaría a la respuesta anterior: Si prueba el código anterior y no funciona, verifique si la dirección de su sitio incluye el "www" o no. La mía no y lo hizo no funcionó si escribía como

Security.allowDomain("www.jeremy-knight.com"); 

que necesitaba escribir como:

Security.allowDomain("jeremy-knight.com"); 
+1

¿Por qué no agregar ambas? – simo

+0

Buen punto, gracias tiene sentido. –

Cuestiones relacionadas