web-services actionscript-3 flash

web services - AS3+HTTP GET no funciona



web-services actionscript-3 (2)

Tengo un proyecto en Flash y uso un servidor web con algunos datos. Leí esa información (json) con:

var url:String = "URL REQUEST"; var request:URLRequest = new URLRequest(url); var loader:URLLoader = new URLLoader(); loader.load(request);

y uso esa información en un TextField. Esto funciona bien y muestra mis datos correctamente. Pero, cuando publico mi trabajo o abro el archivo .swf no muestra los datos.

Dentro de Adobe Flash funciona bien. Afuera no funciona

Tengo un pi raspberry con un servicio en nodeJS ejecutándose. La puerta está abierta en el enrutador.

Mi nodoJS

var express = require(''express''); var bodyParser = require(''body-parser''); var app = express(); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({extended:true})); const port = process.env.PORT || 3001; const SERVER_ROOT = "http://localhost:" + port; var messages = {}; messages["a1"] = blablabla; -- messages["n"] = blablabla; function buildMessage(newID, text, user){ const now = new Date(); return { }; }; app.route("/message") .get(function(req, res) { res.header("Access-Control-Allow-Origin", "*"); res.header("Access-Control-Allow-Headers", "X-Requested-With"); res.json(messages); }); app.param(''messageID'', function(req, res, next, messageID){ req.messageID = messageID; return next(); }) app.listen(port, function() { console.log("Listening on " + port); });


Este es un error de seguridad clásico que se activa cuando un swf intenta cargar contenido en otro dominio que no sea el suyo y no tiene autorización para hacerlo. Para evitar este tipo de error de seguridad, debe crear un archivo crossdomain.xml en la raíz del servidor desde donde desea cargar los datos. Para comprender mejor las cosas, eche un vistazo a este esquema (tomado, y editado, del archivo de política de Adobe Cross Domain ):

Entonces, en este caso, para permitir que un archivo swf en a.com cargue datos de b.com , debemos agregar un archivo crossdomain.xml en la raíz de b.com , para que podamos acceder a él usando b.com/crossdomain.com . Para conocer el contenido de este archivo y más detalles al respecto, puede ver el enlace anterior de la especificación crossdomain. Puede ser así:

<?xml version="1.0"?> <cross-domain-policy> <!-- if used alone, allow only all a.com requests but not its sub-domains --> <allow-access-from domain="a.com"/> <!-- if used alone, allow all a.com sub-domains and a.com requests --> <allow-access-from domain="*.a.com"/> <!-- if used alone, allow only b.a.com sub-domain requests --> <allow-access-from domain="b.a.com"/> </cross-domain-policy>

Espero que todo esto pueda ayudarte a resolver tu problema.


Lo más probable es que esté recibiendo un error de seguridad. Aquí hay algunos pasos que puede tomar:

  1. Asegúrese de agregar los oyentes adecuados a sus cargadores para que pueda manejar adecuadamente los errores.

    loader.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandlerFunction); loader.addEventListener(IOErrorEvent.NETWORK_ERROR, ioErrorHandlerFunction); loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandlerFunction);

  2. Asegúrese de publicar con la configuración de entorno de seguridad correcta.

    Vaya a su archivo de configuración de publicación -> configuración de publicación.

    Verá un menú desplegable etiquetado Seguridad de reproducción local . Asegúrese de que esté configurado para acceder solo a la red y no solo al acceso predeterminado local .

Si maneja sus errores, al menos sabrá cuál es el problema. Si esto no resuelve su problema, agregue un controlador de error global y comparta lo que se está lanzando (si hay algo).

Puede hacer eso con lo siguiente en su línea de tiempo principal o clase de documento:

loaderInfo.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, uncaughtErrorHandler); function uncaughtErrorHandler(event:UncaughtErrorEvent):void { if (event.error is Error) { var error:Error = event.error as Error; trace(error); } else if (event.error is ErrorEvent){ var errorEvent:ErrorEvent = event.error as ErrorEvent; trace(errorEvent); } }

EDITAR

Después de leer sus actualizaciones, parece que podría resolver esto fácilmente repartiendo su swf desde el servidor Pi Node JS en el navegador. (Publique con html luego cópielo en el servidor y luego acceda a él en su navegador web).