Flex: загрузка xml из flex swf

Я создаю (настольное) приложение с помощью Flex, но AIR мне не подходит. (Я слышал, что вам нужен воздушный установщик для воспроизведения .exe) Моему гибкому приложению необходимо загрузить сгенерированный php xml, но он должен запускаться из файла swf при экспорте сборки выпуска.

При тестировании моего гибкого приложения на локальном хосте все в порядке. XML загружен, и я получаю данные. Однако после того, как я экспортирую сборку выпуска и запускаю .swf, я получаю сообщение о безопасности (песочницу), в котором говорится, что он не может загрузить xml с веб-страницы.

Кто-нибудь знает способ обойти это? Кто-нибудь знает, действительно ли воздушный установщик необходим для запуска .exe? (у меня только макинтош)


person Jozzeh    schedule 10.08.2009    source источник


Ответы (3)


Из-за ограничений безопасности Flash Player вы работаете в песочнице. Если вы запустите приложение SWF, оно будет иметь URL-адрес вроде file: /// path / to / my / app, который помещает его в локальный файл sadbox (который является наиболее ограничивающим местом для запуска swf). AIR также предоставляет изолированную программную среду локальной файловой системы, но вы получаете возможность доступа к локальным файлам и сохранения на диск. Если вы используете SWF-файл с http://example.com, вы находитесь в контексте example.com, объявление может загружать контент из этого домена. Если вам нужно загрузить контент из другого домена, вам понадобится файл политики crossdomain.xml в другом домене, где находится контент / служба.

http://www.adobe.com/devnet/flashplayer/articles/fplayer9_security/fig01.gif

В этой статье очень подробно объясняется концепция перекрестного домена. xml файл. Вот пример, который позволяет подключаться из ЛЮБОГО домена к ресурсам:

<?xml version="1.0"?>
<cross-domain-policy>
    <allow-access-from domain="*" />
    <site-control permitted-cross-domain-policies="master-only"/>
</cross-domain-policy>

который сработает в вашем случае.

person Joel Hooks    schedule 10.08.2009

Поскольку приложение Flex будет запускаться из локальной файловой системы - через обработчик file: // или точно так же, как c: \ mypp \ mySwf.swf, на самом деле есть два компонента безопасности, о которых вам нужно позаботиться:

  • Во-первых, как упоминалось в ответах выше, необходимо убедиться, что с вашей php-страницей можно связаться. Это решается с помощью файла политики crossdomain.xml.

  • Вторая проблема связана с тем, как он работает - локально. Flash имеет четыре «песочницы» (удаленная, локальная с файловой системой, локальная с сетью и доверенная). По умолчанию все swf-файлы из Интернета помещаются в удаленную песочницу; для тех, которые выполняются локально, по умолчанию используются local-with-filesystem == нет сетевых вызовов.

Вероятно, вы захотите изменить песочницу, в которую она вставляется. Для локального с файловой системой / сетью вы можете просто настроить флаг в компиляторе Flex (например, с помощью параметров Flex Builder). Однако следует отметить одно: у вас может быть только одно - загружать данные из локальной системы или из сети. И то, и другое одновременно не может быть достигнуто таким образом.

Поместить ваш swf-файл в надежную песочницу, где он может загружать данные как с локальной системы, так и с удаленных серверов, немного сложнее - вам нужно, чтобы установщик изменил некоторые файлы конфигурации.

person Cristian Ivascu    schedule 10.08.2009

вам нужно будет добавить файл междоменной политики, это небольшой фрагмент xml, в котором говорится, что flex разрешено разговаривать с этим удаленным объектом

person Jon    schedule 10.08.2009