Загруженные SWF не будут выполнять свои функции в воздухе - PullRequest
0 голосов
/ 15 сентября 2018

Обратитесь за помощью!Поэтому я делаю приложение AIR, которое загружает SWF-файлы в контейнер для просмотра пользователем.Однако когда я загружаю файлы в их контейнеры, загруженные SWF-файлы не могут выполнять свой собственный код.IE нажимает невидимую кнопку на загруженном SWF и она меняет цвет.Я пытался найти решения Google для этого, так как Security.allowDomain ("*");выдает эту ошибку во флэш-памяти.Однако из того, что я прочитал, AIR не позволяет загруженным SWF-файлам выполнять код по какой-то причине, но я также не уверен на 100% в этом.

SecurityError: Error #3207: Application-sandbox content cannot access this feature.
at flash.system::Security$/allowDomain()
at BugFree()[D:\Desktop\BugFree\BugFree.as:72]

Без домена Allow выдает эту ошибку безопасности, когдапопытка нажать невидимую кнопку.

*** Security Sandbox Violation ***
SecurityDomain 'file:///D:/Desktop/Rewritten Tester/TechDemoSwordNew.swf' 
tried to access incompatible context 'app:/BugFree.swf'
*** Security Sandbox Violation ***
SecurityDomain 'file:///D:/Desktop/Rewritten Tester/TechDemoSwordNew.swf' 
tried to access incompatible context 'app:/BugFree.swf'
SecurityError: Error #2047: Security sandbox violation: parent: 
file:///D:/Desktop/Rewritten Tester/TechDemoSwordNew.swf cannot access 
app:/BugFree.swf.
at flash.display::DisplayObject/get parent()
at TechDemoSwordNew_fla::Button_Play_21/onButtonPress()

Отображается только на панели вывода Animate.Когда я публикую его с приложением во время выполнения и открою исполняемый файл, он не выдаст никаких ошибок, но невидимая кнопка все еще не работает.

Вот код загружаемого SWF-файла.

btnButton.addEventListener(MouseEvent.CLICK, onButtonPress, false, 0, true);
function onButtonPress(event:MouseEvent):void
{
MovieClip(parent).play();
}
stop();

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

Код, используемый для загрузки SWF, ниже

public function WeaponLoad()
    {
        if(FileMenu.WeaponFileTxt.text != "")
        {
            LoadWeapon(FileMenu.WeaponFile.nativePath);
        }
        else if(FileMenu.WeaponFileTxt.text == "")
        {
            Character.mcChar.weapon.removeChildAt(0);
            Character.mcChar.weaponOff.removeChildAt(0);
        }
    }

public function LoadWeapon(strFilePath: String)
    {
        WeaponLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, CompleteWeaponLoad);
        WeaponLoader.load(new URLRequest(strFilePath), new LoaderContext(false, new ApplicationDomain(ApplicationDomain.currentDomain)));
    }

public function CompleteWeaponLoad(e: Event)
    {
        var WeaponClass: Class;
        if (MiscMenu.WeaponSelect.MainClick.currentFrame != 3)
        {
            try
            {
                trace("WeaponOff");
                WeaponClass = WeaponLoader.contentLoaderInfo.applicationDomain.getDefinition(FileMenu.WeaponLinkTxt.text) as Class;
                this.Character.mcChar.weapon.removeChildAt(0);
                this.Character.mcChar.weaponOff.removeChildAt(0);
                this.Character.mcChar.weapon.addChild(new(WeaponClass)());
            }
            catch (err: Error)
            {
                trace("Either the weapon class doesnt exist or it is wrong");
                this.Character.mcChar.weapon.removeChildAt(0);
                this.Character.mcChar.weaponOff.removeChildAt(0);
            }
        }
        else if (MiscMenu.WeaponSelect.MainClick.currentFrame == 3)
        {
            try
            {
                WeaponClass = WeaponLoader.contentLoaderInfo.applicationDomain.getDefinition(FileMenu.WeaponLinkTxt.text) as Class;
                this.Character.mcChar.weapon.removeChildAt(0);
                this.Character.mcChar.weaponOff.removeChildAt(0);
                this.Character.mcChar.weapon.addChild(new(WeaponClass)());
                this.Character.mcChar.weaponOff.addChild(new(WeaponClass)());
            }
            catch (err: Error)
            {
                trace("Either the weapon class doesnt exist or it is wrong");
                this.Character.mcChar.weapon.removeChildAt(0);
                this.Character.mcChar.weaponOff.removeChildAt(0);
            }
        }
    }

Любая помощь будет оценена, поскольку я не знаю, как изменить какие-либо параметры изолированной программной среды безопасности в настройках публикации, поскольку она неактивна.для меня.Как я уже говорил, я пытался найти его в Google, но я не мог найти никаких ответов.Также стоит отметить, что я новичок-самоучка, и я не знаю много вещей относительно AS3.Я знаю, что мои коды могут быть чище, и я планирую очистить их и правильно сократить потребление памяти, как только у меня будет запущена и запущена базовая программа.Спасибо за помощь!

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Не можете ли вы связать свои SWF-файлы с приложением AIR и использовать класс File для их загрузки?Если вы хотите использовать классы из swfs, возможно, стоит подумать о создании библиотеки swc?

0 голосов
/ 15 сентября 2018

Похоже, вы неправильно настраиваете домен приложения.Вот код, включенный в документацию as3:

 var loader:Loader = new Loader();
 var url:URLRequest = new URLRequest("[file path].swf");
 var loaderContext:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain, null);
 loader.load(url, loaderContext);

Используйте его в своей функции LoadWeapon .

Тем временем старайтесь не использовать заглавные буквы для начальных переменных иимена методов.В ActionScript имена, начинающиеся с заглавных букв, представляют имена классов.Это значительно улучшит читабельность вашего кода.

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