Cairngorm SequenceTask + URLLoader выдает SecurityError из-за отсутствия взаимодействия с пользователем - PullRequest
2 голосов
/ 24 марта 2011

Я пытаюсь получить приложение для загрузки нескольких сгенерированных на стороне клиента изображений (не файлов, поэтому я не могу использовать FileReference), отображая ход загрузки. Это оказалось намного сложнее, чем должно быть. Я использую библиотеку задач Cairngorm для выполнения следующих действий с образом, сгенерированным на клиенте:

  1. Создание объекта BitmapData для рисования содержимого области этапа
  2. Асинхронно кодируйте изображение в формате JPEG, чтобы отобразить индикатор выполнения (см. http://dgrigg.com/blog/2009/03/05/as3-jpegencoder-and-big-images/)
  3. Загрузить изображение асинхронно (чанк, см. http://soenkerohde.com/2010/01/chunk-file-upload/), чтобы показать прогресс

Когда пользователь нажимает кнопку, запускается SequenceTask, кодировка работает как чудо, но когда происходит загрузка, она вспыхивает с ошибкой:

SecurityError: Ошибка # 2176: некоторые действия, например те, которые отображают всплывающее окно, могут быть вызваны только при взаимодействии с пользователем, например, щелчком мыши или нажатием кнопки.

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

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

Спасибо за любые идеи.

Ответы [ 3 ]

1 голос
/ 24 марта 2011

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

Такое поведение было введено в Flash Player 10 (я почти уверен, что этого не произошло с URLLoaders во FlashИгрок 9) и нет способа обойти его , иначе это будет серьезная дыра в безопасности.Диспетчеризация «фальшивых» событий мыши не будет работать, выгрузка / POST должна выполняться в том же стеке вызовов, где фиксируется взаимодействие с пользователем (щелчок мыши или сочетание клавиш).

Проверка "Требования к взаимодействию пользователяво Flash Player 10 " для получения дополнительной информации.

0 голосов
/ 06 апреля 2012

У меня сейчас та же проблема, что и у вас.У меня есть несколько изображений, и только первая загрузка работает как талисман, но при второй загрузке перестала возникать следующая ошибка: «SecurityError: Ошибка # 2176», и, просматривая ваш пост, я поняла, что это из-за внутреннего вызова при второй загрузке.вместо взаимодействия с пользователем.

Я пробовал со многими опциями, один из которых заключался в закрытии URL-загрузчика с помощью close () перед началом следующей загрузки и той же ошибкой.Хитрость заключается в эмуляции взаимодействия с пользователем.

0 голосов
/ 24 марта 2011

Не могли бы вы имитировать действие пользователя, отправив объект MouseEvent?

Я пытался сделать FileReference.save() на своем конце, просто вызвав его (он не предназначен для работы без взаимодействия с пользователем), но это работает, так что, возможно, что-то другое с моей конфигурацией

...