Поведение безопасности в Adobe Air - PullRequest
0 голосов
/ 15 апреля 2010

Я пытаюсь загрузить внешние SWF-файлы в свое приложение Adobe AIR. Загруженный SWF-файл пытается получить доступ к URL-адресу, чтобы получить некоторую информацию через XML. При запуске SWF сам по себе работает нормально. При загрузке SWF-файла из File.applicationStorageDirectory я получу сообщение об ошибке безопасности, поскольку загруженное приложение исполняется в изолированной программной среде с локальной файловой системой. Первый вопрос : Есть ли способ изменить это? Что загруженный SWF работает в сетевой песочнице?

Поскольку первая попытка не сработала, я переместил SWF в каталог app: //. Теперь я получу ошибку безопасности, потому что на сервере нет доступного файла политики, где должны быть получены данные XML. Второй вопрос : Почему файл политики не требуется при запуске SWF-файла сам по себе, но необходим при попытке загрузить данные из изолированной программной среды приложения? Что я делаю не так?

Заранее спасибо!

1 Ответ

1 голос
/ 16 апреля 2010

Вот мое решение.

Кстати, я делаю приложение на основе ActionScript. Моя цель здесь - создать приложение AIR, которое загружает различные модули по запросу из данного интернет-ресурса. Два приложения используют child / parentSandboxBridge для связи.

Я использовал класс SWFLoader, но неправильно передал LoaderContext с помощью allowLoadBytesCodeExecution (или allowCodeImport для AIR2.0). Когда я передавал LoaderContext с упомянутой переменной, я получал VerifyError: Ошибка # 1053: незаконное переопределение активации в mx.managers.SystemManagerProxy, поскольку приложение AIR выполняется с помощью Flex 4.0, а загруженный SWF-файл компилируется с помощью Flex 3.5.

Причиной возникновения ошибки, хотя для свойства loadForCompatibility задано значение true, было то, что класс SWFLoader не устанавливает необходимый домен applicationDomain для совместимости при передаче объекта LoaderContext. Так что я сам установил приложение Домен, и все работает как шарм. Если кто-то заинтересован в этой процедуре, просто посмотрите метод SWFLoader :: loadContent. Во Flex 4 интересная часть начинается в строке 1836 года.

...