SecurityError: Ошибка № 2000: нет активного контекста безопасности при импорте внешнего файла SWF - PullRequest
0 голосов
/ 25 января 2012

Я пытаюсь загрузить SWF-файл, содержащий галерею изображений на основе xml, на 25-м кадре временной шкалы внутри Flash Professional CS5.5 с использованием Actionscript 3. При этом я получаю эту ошибку "SecurityError: Ошибка № 2000: Нетактивный контекст безопасности ".Ниже приведен код as3:

stop();

import flash.net.URLRequest;
import flash.display.Loader;
import flash.events.Event;
import flash.events.ProgressEvent;

function startLoad() { 
    var mLoader:Loader = new Loader();
    var mRequest:URLRequest = new URLRequest("../xml_gallery_2_852/XMLGALLERY2.swf");
    mLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler);
    mLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgressHandler); 
    mLoader.load(mRequest);
} 

function onCompleteHandler(loadEvent:Event) {
    addChild(loadEvent.currentTarget.content);
} 

function onProgressHandler(mProgress:ProgressEvent) {
    var percent:Number = mProgress.bytesLoaded/mProgress.bytesTotal;        
    trace(percent); 
}

startLoad();

Ответы [ 2 ]

4 голосов
/ 25 января 2012

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

EDIT

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

Вы загружаете галерею изображений, в которую , в свою очередь, загружаются другие файлы (XML) , но внешний SWF-файл был скомпилирован с параметром use-network, а ваш FLA автоматически запускается как приложение local-trusted, когда экспортируется из Flash IDE. Это, конечно, нарушение песочницы.

Вы можете проверить это, запустив SWF-файл с веб-сервера с действующей политикой безопасности - если я правильно понимаю, ваше приложение должно работать.

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

END EDIT

Ошибка может быть связана с небольшой задержкой между созданием загрузчика и инициализацией его контекста безопасности. Подробнее см. в этом блоге .

Если это так, вы должны быть в состоянии правильно избавиться от ошибки, отложив запрос на загрузку с помощью setTimeout() или переместив объявление вашего загрузчика за пределы функционального блока, т.е.

var mLoader:Loader = new Loader();

function startLoad() { 
    var mRequest:URLRequest = new URLRequest("../xml_gallery_2_852/XMLGALLERY2.swf");
    mLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler);
    mLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgressHandler); 
    mLoader.load(mRequest);
} 

Объявление вашего загрузчика в качестве временной переменной в любом случае «грязно»: ссылка потеряна, но прослушиватели событий, добавленные вами в contentLoaderInfo, сохраняют его в памяти независимо от того, нужен он по-прежнему или нет. Это может привести к серьезным утечкам памяти, если вы собираетесь загрузить более одного файла. Вы всегда должны сохранять ссылку на ваш загрузчик, если вы хотите правильно утилизировать загруженный контент, когда он больше не нужен (с помощью Loader.unload()), и сделать сам загрузчик доступным для сборки мусора (путем удаления прослушивателей событий и явного установка ссылки на null после использования).

0 голосов
/ 01 мая 2013

Это старая ветка, и, похоже, на нее уже дан ответ, но было другое, очевидное, решение (которое могло или не могло помочь здесь).

Я мог бы использовать этот ответ, чтобы избавить меня от горя (я сам прошел через это).

Я загружал изображения через класс Loader и продолжал получать это загадочное сообщение (я говорю загадочное, потому что оно не помогло мне определить проблему) - SecurityError: Ошибка # 2000: Нет активного контекста безопасности

Решение - использовать правильный путь к источнику. Я изменил имя каталога и забыл обновить свой код.

Итак, я вызывал «src / pics / image01.png» в URLRequest ... Однако я изменил каталог «pics» на «img» и должен был вызывать «src / img / image01.png» вместо этого.

Если вы получаете сообщение «Ошибка № 2000» , дважды проверьте ваш путь и убедитесь, что файл существует , прежде чем что-либо еще.

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