2014-12-19 4 views
0

У меня есть проект во Flash, и я использую веб-сервер с некоторыми данными. Я прочитал эту информацию (json) с помощью:AS3 + HTTP GET не работает

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

и использую эту информацию в текстовом поле. Это прекрасно работает и корректно показывает мои данные. Но, когда я публикую свою работу или открываю файл .swf не показывает данные.

Внутри Adobe Flash отлично работает. Внешний вид не работает.

У меня есть малина pi со службой в узле jS. Дверь открыта в маршрутизаторе.

Моего nodeJS

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

Попробуйте загрузить версию отладочного флэш-плеера [здесь] (https://www.adobe.com/support/flashplayer/downloads.html), чтобы узнать, есть ли у вас ошибка, иначе я думаю, что вы должны вставлять шрифт используемые в текстовом поле, посмотрите здесь, как [встроить шрифты для динамического текстового поля] (https://support.google.com/richmedia/answer/2661568?hl=ru). – akmozo

+0

Это ошибка с флеш-плеером в режиме отладки Ошибка # 2044: необработанная защитаError :. text = Ошибка # 2048: нарушение безопасности песочницы: file: ... – stlkr

+0

Как вы управляете swf на Pi? С сайта? локальная страница html? Приложение AIR? – BadFeelingAboutThis

ответ

0

Это классическая ошибка безопасности, которая запускается, когда swf пытается загрузить контент в другом домене, отличном от его собственного, и не имеет разрешения на это. Поэтому, чтобы избежать этого типа ошибки безопасности, вам необходимо создать файл crossdomain.xml в корневом каталоге сервера, откуда вы хотите загрузить данные.Для того, чтобы более понять вещи, посмотрите на эту схему (взято, и отредактирован, из Adobe Cross Domain Policy File):

enter image description here Таким образом, в этом случае, чтобы файл SWF в a.com для загрузки данных из b.com, мы должны добавить crossdomain.xml файл в корне b.com, поэтому мы можем получить к нему доступ, используя b.com/crossdomain.com. Для содержимого этого файла и более подробной информации об этом вы можете увидеть ссылку выше спецификации crossdomain. Это может быть так:

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

Я надеюсь, что все это поможет вам решить вашу проблему.

+0

Мой сервер - единственный файл nodeJS ... как я представляю xml-файл для перекрестного домена? – stlkr

+0

@stlkr Как вы запрашиваете данные? – akmozo

+0

мой сервер работает в моей малине pi в nodeJS. Я запускаю файл следующим образом: узел --harmony server.js и я получаю данные с этого мини-сервера в as3, как в моем первом вопросе. – stlkr

0

Скорее всего, вы получаете ошибку безопасности. Вот несколько шагов, которые вы можете предпринять:

  1. Обязательно добавьте соответствующих слушателей к своим погрузчикам, чтобы вы могли правильно обрабатывать ошибки.

    loader.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandlerFunction); 
    loader.addEventListener(IOErrorEvent.NETWORK_ERROR, ioErrorHandlerFunction); 
    loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandlerFunction); 
    
  2. Убедитесь, что вы публикуете правильную настройку изолированной программной среды.

    Перейти к настройкам публикации файл -> опубликовать настройки.

    Вы увидите выпадающее обозначение Локальное обеспечение безопасности воспроизведения. Убедитесь, что для этого параметра установлено значение только для доступа к сети доступа, а не по умолчанию Доступ только для местных пользователей.

Если вы обрабатываете свои ошибки, вы, по крайней мере, знаете, в чем проблема. Если это не решит вашу проблему, добавьте глобальный обработчик ошибок и делитесь тем, что бросается (если есть).

Вы можете сделать это с помощью следующих на основной временной шкалы или документа класса:

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

EDIT

От читать ваши обновления, это выглядит, как вы могли бы легко решить эту проблему с помощью вывести ваш swf с сервера Pi Node JS в браузере. (Опубликуйте с помощью html, затем скопируйте на сервер, затем получите доступ к нему в своем веб-браузере).

+0

Это ошибка с флэш-плеером в режиме отладки. Ошибка # 2044: Необработанная защитаError :. text = Ошибка # 2048: нарушение безопасности песочницы: файл: ... В моих настройках публикации я выбираю только сеть доступа, и у меня есть одна проблема – stlkr

+0

Дополнительная информация: Мой сервер находится в узлеJS, работает в малине pi, и все конфигурации выглядят отлично. Я немного искал, и я нашел as3httpclientlib, но у меня проблема с импортом. Любая помощь? – stlkr

+0

Ваша проблема тогда будет одним из правил перекрестных доменов. Хотя по-прежнему очень хорошая идея добавить прослушивателей ошибок к вашему загрузчику. – BadFeelingAboutThis