装载的SWF不会在空中发挥其功能



回来寻求帮助!因此,我正在制作一个AIR应用程序,该应用程序将SWF加载到容器中以供用户查看。但是,当我将文件加载到它们的容器中时,加载的 SWF 无法执行自己的代码。IE按下加载的SWF上的不可见按钮,它会改变颜色。我试图谷歌解决方案,因为安全允许域("*"(;正在闪存中抛出此错误。但是,从我所读到的内容来看,出于某种安全原因,AIR 不允许加载的 swfs 执行代码,但我也不是 100% 确定。

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

如果没有允许域,它会在尝试单击不可见按钮时引发此安全错误。

*** 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()

这仅显示在动画输出栏中。当我发布它时,嵌入了运行时的应用程序,并打开 exe,它没有抛出任何错误,但不可见的按钮仍然不起作用。

下面是正在加载的 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);
}
}
}

任何帮助将不胜感激,因为我不知道如何在发布设置中更改任何安全沙箱设置,因为它对我来说是灰色的。就像我说的,我试着谷歌搜索它,但我似乎想不出任何答案。另外值得注意的是,我是一个自学成才的新手,我对AS3知之甚少。我知道我的代码可以更干净,我计划在启动并运行基本程序后清理它并适当减少内存消耗。谢谢你的帮助!

您似乎没有正确设置应用程序域。以下是 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 中,以大写开头的名称表示类名。它将大大提高代码的可读性。

您不能将 swf 与 AIR 应用程序捆绑并使用 File 类来加载它们吗?如果你想使用swfs中的类,也许可以考虑制作swc库?

相关内容

  • 没有找到相关文章

最新更新