Ресурсы SWF для воздушных приложений в ApplicationStorageDirectory создают нарушение песочницы - PullRequest
0 голосов
/ 21 октября 2009

У меня есть приложение Air, которое позволяет пользователям импортировать файлы jpg, png и swf и использовать их в качестве источника для изображения, которое они могут перетаскивать по холсту.

Функция импорта копирует выбранный файл в каталог images внутри ApplicationStorageDirectory.

Когда я нажимаю на изображение, в качестве источника которого указан файл swf, я получаю нарушение песочницы безопасности (например, SecurityDomain 'app-storage: /Project1/images/menuBarBkgd.swf' попытался получить доступ к несовместимому контексту 'app: / main.swf '). Мой обработчик mouseDown не вызывается, поэтому я не могу выбрать его и разрешить его перетаскивать.

Очевидно, это как-то связано с приложением: домен, но как мне обойти это?

Ответы [ 4 ]

1 голос
/ 23 февраля 2011

Почему бы не использовать mouseChildren = false, чтобы блокировать доступ мыши к изображению вообще? Sprite, принадлежащий приложению AIR, может показывать изображение и обрабатывать входящие MouseEvents самостоятельно. Или же вы можете прочитать BitmapData из загруженного изображения и использовать его для заполнения нового экземпляра Bitmap, встроенного в приложение AIR.

0 голосов
/ 30 октября 2009

Ответ, опубликованный ранее, не является решением исходного вопроса. Проблема здесь заключается в SecurityDomain, а не ApplicationDomain. Я думаю, что есть способ использовать SWF-файлы, внешние по отношению к app: / domain, в приложении Air, но документация далеко не прямая по этому вопросу, и окончательное решение, вероятно, потребует некоторого вмешательства конечного пользователя.

Я просто пытался создать простой редактор страниц wysiwyg и позволить пользователям использовать изображения, созданные в виде swf-файлов, в качестве источника для компонентов mx: Image. Это сработало! Вы можете использовать SWF-файлы, внешние по отношению к app: / domain, в качестве источника для mx: Image. Однако, если вы хотите перетащить это на экран, как только вы нажмете на него, вы получите нарушение Песочницы, и ваше событие mousedown, которое запускает перетаскивание, будет прервано. Кажется, что даже если в SWF-файле нет сценариев, если какие-либо ресурсы были превращены в movieClips (здесь мы говорим о Flash), то, как только вы нажмете на них, они попытаются сослаться на родительский SWF. Приложение Air воспринимает это как внешний SWF-файл, пытающийся его записать, и возникает нарушение песочницы.

Решение этой конкретной проблемы - поместить mx: Image в mx: Canvas и установить для свойства mouseChildren в Canvas значение false.

0 голосов
/ 04 сентября 2010

Действия перетаскивания обычно включают доступ к сцене, которая принадлежит родительской песочнице.

У вас есть несколько вариантов - один из них - просто игнорировать / перехватывать ошибку, если она фактически не влияет на функциональность в скомпилированном приложении Air, которое не обязательно прекращает работу при возникновении такой ошибки не делает).

Другой вариант заключается в рефакторинге функциональности, чтобы он не выходил на сцену. Это трудно сделать, хотя, кажется, есть некоторые события мыши, которые пытаются получить координаты сцены, чтобы заполнить их свойства. Я часто вижу эту ошибку, и она обычно не мешает.

0 голосов
/ 21 октября 2009

В Adobe Air следующие домены приложений разрешены только для URL, начинающихся с «app: /»:

  1. ApplicationDomain.currentDomain
  2. new ApplicationDomain(ApplicationDomain.currentDomain)
  3. new ApplicationDomain(domain), где domain - любой из этих трех типов.

Вы можете загрузить SWF-файл в приложение Adobe Air с другого URL-адреса, создав независимый домен приложения, который не имеет доступа к ApplicationDomain.currentDomain ни прямо, ни косвенно. Вы можете сделать это, передав null конструктору ApplicationDomain.

Другими словами, используйте new ApplicationDomain() в качестве домена приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...