2017-02-21 19 views
0

У меня есть проект ActionScript, который я развертываю как приложение Air desktop, так и в браузере с помощью плагина Flash.Вспышка SWF, считывающая содержимое файла изнутри браузера, возможно?

Развертывание моего рабочего стола считывает сам файл SWF, создает хэш файла и отправляет его на мой сервер. Если хэш не соответствует ожидаемому, SWF затем загружается на мой сервер для дальнейшего изучения. Все это использует библиотеки flash.filesystem.

Можно ли это сделать при развертывании в качестве файла Flash в браузере. У меня нет доступа к flash.filesystem для развертывания браузера.

Существует ли способ, кроме использования файловой системы, для чтения самого SWF.

ответ

2

Согласно этой статье (http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/system/Worker.html) весь ваш контент SWF доступен через loaderInfo.bytes: ByteArray так что нет никакой необходимости загружать что-либо. Наслаждаться.

Запасной погрузка:

var aRequest:URLRequest = new URLRequest; 

// Property loaderInfo.url contains the full path to the SWF. 
aRequest.url = loaderInfo.url; 

var aLoader:URLLoader = new URLLoader; 

// Set data format to binary instead of default text. 
aLoader.dataFormat = URLLoaderDataFormat.BINARY; 
aLoader.addEventListener(Event.COMPLETE, onReady); 
aLoader.load(aRequest); 

function onReady(e:Event):void 
{ 
    var anSWF:ByteArray = aLoader.data as ByteArray; 
    trace(anSWF.length); 
} 
+0

Отлично, loaderInfo.bytes содержит фактические данные swf, именно то, что я искал. – Mar

+0

При дальнейшем рассмотрении я нашел следующее: фактический swf сам и содержимое на loaderInfo.bytes различны, это связано с тем, что loaderInfo.bytes содержит распакованную версию. – Mar

+0

@MartinSmith Хорошо, добавлено решение для загрузки. Жалость loaderInfo.bytes не работает. – Organis

0

Вы можете развернуть свой код Flex в настольном приложении AIR, который переводится в SWF-файл, который может использоваться в браузерах как внедренный объект. Подробнее ... here.

1

Чтобы получить байты SWF, используйте API URLStream для приема байтов в переменную bytearray.

Затем вы можете использовать API ByteArray, чтобы читать (обрабатывать) bytearray.

+0

Спасибо, но я правильно полагая, что такой метод зависит от вас указать местоположение швейцарских франков. И даже если вы прочтете местоположение файла, вы будете полагаться на браузер, говорящий вам? Это, я думаю, несколько отличается от реализации на рабочем столе, потому что я прошу указать местоположение фактического swf, который делает запрос, поэтому у меня есть некоторые, конечно, что я читаю правильный файл. – Mar

+0

См. Выше комментарии ref loaderInfo.bytes. – Mar

+0

Несмотря на то, что для случая есть более простое решение, URLStream не нужен, так как вам нужен весь контент. Достаточно URLLoader.dataFormat = URLLoaderDataFormat.BINARY. – Organis

Смежные вопросы