AS3 + HTTP GET non funziona

Ho un progetto in Flash e utilizzo un server web con alcuni dati. Ho letto quell’informazione (json) con:

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

e io uso queste informazioni in un campo di testo. Funziona bene e mostra i miei dati correttamente. Ma quando pubblico il mio lavoro o apro il file .swf non mostra i dati.

All’interno di Adobe Flash funziona bene. Fuori non funziona.

Ho un raspberry pi con un servizio in nodeJS in esecuzione. La porta è aperta nel router.

Il mio 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); }); 

Questo è un classico errore di sicurezza che viene generato quando uno swf tenta di caricare il contenuto in un altro dominio diverso dal proprio e non ha l’authorization per farlo. Pertanto, per evitare questo tipo di errore di sicurezza, è necessario creare un file crossdomain.xml nella radice del server da cui si desidera caricare i dati. Per comprendere meglio le cose, dai un’occhiata a questo schema (preso e modificato da Adobe Cross Domain Policy File ):

inserisci la descrizione dell'immagine qui Quindi, in questo caso, per consentire a un file swf in a.com di caricare i dati da b.com , dobbiamo aggiungere un file crossdomain.xml nella root di b.com , in modo che possiamo accedervi utilizzando b.com/crossdomain.com . Per il contenuto di questo file e maggiori dettagli a riguardo, puoi vedere il link sopra della specifica del crossdomain. Può essere così:

          

Spero che tutto questo possa aiutarti a risolvere il tuo problema.

Molto probabilmente stai ricevendo un errore di sicurezza. Ecco alcuni passaggi che puoi eseguire:

  1. Assicurati di aggiungere i listener appropriati ai tuoi caricatori in modo da poter gestire correttamente gli errori.

     loader.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandlerFunction); loader.addEventListener(IOErrorEvent.NETWORK_ERROR, ioErrorHandlerFunction); loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandlerFunction); 
  2. Assicurati di pubblicare con la corretta impostazione sandbox di sicurezza.

    Vai al tuo file delle impostazioni di pubblicazione -> pubblica le impostazioni.

    Verrà visualizzato un menu a discesa con etichetta Sicurezza di riproduzione locale . Assicurarsi che questo sia impostato per accedere solo alla rete e non solo al locale di accesso predefinito.

Se gestisci i tuoi errori, saprai almeno qual è il problema. Se questo non risolve il tuo problema, aggiungi un gestore di errori globale e condividi ciò che viene lanciato (semmai).

Puoi farlo con quanto segue sulla tua timeline principale o sulla tua class di documenti:

 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); } } 

MODIFICARE

Dalla lettura dei tuoi aggiornamenti, sembra che tu possa facilmente risolvere questo problema estraendo il tuo swf dal server JS Pi Node nel browser. (Pubblicare con HTML quindi copiare sul server quindi accedervi nel browser Web).