加载 SWF 文件并在同一窗口中将其关闭

Posted

技术标签:

【中文标题】加载 SWF 文件并在同一窗口中将其关闭【英文标题】:Load an SWF file and close it in the same window 【发布时间】:2018-08-15 14:20:57 【问题描述】:

我正在构建一个应用程序,用户单击一个按钮并在同一窗口中加载一个 SWF 文件,然后如果他完成,则使用关闭按钮将其关闭:

我希望用户能够点击橙色关闭按钮,并返回到第一帧(蓝色),

我试过这个:

orangeClosingButton.addEventListener(MouseEvent.CLICK, clickHandler);
 function clickHandler(event:MouseEvent):void 
  fscommand("quit");
 

但这会关闭整个应用程序,我只想关闭灰色的 SWF 文件,然后返回蓝色的主应用程序,知道如何实现吗?

【问题讨论】:

您需要在保存已加载 SWF 的 Loader 实例上调用 Loader.unloadAndStop() 方法:help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/…** 我需要在主文件(蓝色的)还是加载的文件(灰色的)中调用它,因为“orangeClosingButton”在加载的文件中。 好的,我会在几分钟后发布答案。 【参考方案1】:

为了能够完全停止和卸载已加载的 SWF,您需要在 Loader 实例上调用 unloadAndStop() 方法,该实例保存已加载的内容。喜欢:

var outerSwf:Loader = new Loader;

// Load.
outerSwf.load(new URLRequest("outer.swf"));
addChild(outerSwf);

// ...
// Unload.
removeChild(outerSwf);
outerSwf.unloadAndStop();

然后,如果您想从加载的内容内部执行此操作。您可以将此方法订阅到按钮单击或调用它。

function unloadThisSWF(e:Event = null):void

    // Obtain the reference to the Loader instance.
    // In AS3 root will always point to the compiled SWF
    // root, not to the topmost root attached to the Stage.
    var aLoader:Loader = root.parent as Loader;

    // Run it only if this SWF was actually loaded.
    if (aLoader)
    
        // Detach it from display list if attached.
        if (aLoader.parent)
        
            aLoader.parent.removeChild(aLoader);
        

        // Invoke the unload.
        aLoader.unloadAndStop();
    

【讨论】:

谢谢,帮了大忙。【参考方案2】:

取决于您如何加载内部 SWF。假设这是 ActionScript2 并且这段代码在加载的电影(灰色)中,这样的事情可能会起作用:

orangeClosingButton.addEventListener(MouseEvent.CLICK, clickHandler);
function clickHandler(event:MouseEvent):void 
  // remove the event listener so the loaded movie can be garbage collected
  orangeClosingButton.removeEventListener(MouseEvent.CLICK, clickHandler);
  unloadMovie(this);

不确定是否可以从内部 swf 中卸载电影,也许这个 unloadMovie() 必须在主 SWF 中以及您加载电影的位置。

如果这是 AS3,您应该使用 removeChild(yourMovieClip) 而不是 unloadMovie

【讨论】:

unloadMovie 函数是 AS1/2 函数,而不是 AS3。 我试过了,但我得到了这个错误:“提供的 DisplayObject 必须是调用者的孩子”

以上是关于加载 SWF 文件并在同一窗口中将其关闭的主要内容,如果未能解决你的问题,请参考以下文章

安全沙箱冲突 - 加载文件系统和网络SWF文件

将远程计算机名称变量从批处理文件传递到 hta 并在弹出窗口或 html 窗口中打印出值 [关闭]

为什么在重新加载而不是窗口加载后引导模态弹出窗口。可能是什么原因?

从内部窗口关闭客户端模板

EditPlus 设置关闭后不打开未关闭的文件,以及设置在同一个窗口打开多个文件

在android中将值从一个窗口传递到另一个窗口