Какие ограничения / обходные пути необходимы для сторонних внешних файлов swf

Мы загружаем внешний SWF-контент в приложение Adobe Air. Контент предоставляется растущим числом третьих лиц.

Будучи сторонним контентом, он будет загружен в отдельный домен безопасности (trustContent = false) и домен приложения-брата (loadForCompatibility = true). Мы делаем это с помощью класса Loader.

Какие функции / варианты / подходы могут вызвать проблемы при использовании SWF-файла в качестве внешнего содержимого?

Меня интересуют любые проблемы, поскольку мы уже воспроизводили проблемы с контентом, которые возникают независимо от домена приложения / домена безопасности, в котором он загружен (а также возникает как в загрузчике, так и в SWFLoader).

Мы высоко ценим любые обходные пути для решения проблем, особенно те, которые можно применить из основного приложения.


person eglasius    schedule 19.06.2009    source источник


Ответы (2)


Большая неприятная проблема (и с которой мы уже много раз сталкивались!) Заключается в том, что внешним SWF просто нельзя напрямую доверять. Всегда. Это в лучшем случае затрудняет обмен данными между ними и базовым приложением AIR.

Существует хитрость вокруг этого, основанная на загрузке данных SWF через URLLoader, а затем взятии из него массива байтов и закачке его в загрузчик. Однако я считаю, что взлом был убит с помощью AIR 1.5.1.

При этом можно обмениваться данными между приложением AIR и загруженным SWF через то, что Adobe называет мостом песочницы. Однако настройка моста в песочнице - настоящая головная боль, и любые сложные данные (объекты, даже такие простые, как массивы) разделяются на общие объекты на другой стороне моста и не могут быть возвращены в исходную форму.

Для наших недавних проектов, в которых необходимо было использовать мост, мы создали специальный класс под названием AIRBridge, который вы используете с обеих сторон моста, и он облегчает правильную настройку. Если вам интересно, вы можете получить текущий источник из нашего проекта Google Code Automata-Tools < / а>.

person Branden Hall    schedule 20.06.2009
comment
Большое спасибо Брандену за хорошую информацию. Это подтверждает то, что я недавно прочитал о модели воздушной безопасности в ссылке, опубликованной в этом ответе: stackoverflow.com/questions/697155/. В настоящее время мы не общаемся со сторонними SWF-файлами, но мы обязательно займемся этим проектом, когда мы доберемся до него. Испытывали ли вы другие проблемы с внешним контентом, например, с использованием stage, root и аналогичных свойств? (недавно прочитал, что может вызвать проблемы, но не уверен) - person eglasius; 21.06.2009
comment
Да, у вас нет доступа к сцене. Любая попытка получить к нему доступ приведет к исключению. Это также означает, что некоторые компоненты не будут работать в дочернем swf. Я знаю, что comobox - один из злоумышленников, и я подозреваю, что любой из них, который выводит всплывающее окно кого-либо, вызовет проблемы. Удачи, и было чертовски разумно сначала спросить здесь - мы должны были обнаружить эти проблемы болезненным способом! - person Branden Hall; 21.06.2009

К одному мы уже обращались:

  • Содержимое за пределами этапа внешнего swf отображается в приложении, и при настройке размера, в котором он будет отображаться, учитываются элементы за кадром. Временное решение: добавьте маску в основное приложение, чтобы скрыть внешний контент. Используйте .content.width / height (полностью с элементами вне сцены) и .content.loaderInfo.width / height (исходный размер рабочей области), чтобы вычислить, насколько масштабировать контент, чтобы исходная сцена соответствовала видимой области.
person eglasius    schedule 19.06.2009