如何使用Actionscript 3为Flash横幅广告制作关闭按钮

时间:2014-03-19 12:14:03

标签: actionscript-3 flash advertising

我正在处理使用Actionscript 3构建的Flash横幅广告。它将嵌入到网页中。

广告需要有一个关闭按钮。当用户点击该按钮时,广告就会消失。

这需要完全在横幅中完成,因为我们无法控制将要嵌入的网页。

在Actionscript 2中,我曾经通过在用户点击按钮时运行此代码来执行此操作:

unloadMovie(this);

这似乎不再适用于Actionscript 3.如何在AS3中实现此功能?

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

出于文档目的,以下是安德鲁和我就此问题达成的结论:从swf中卸载/删除swf文件,以允许用户访问swf下的元素。

一种选择是使用ExternalInterface将js代码注入:

  1. 获取在DOM注册的swf的id /名称
  2. 使用找到的id / name
  3. 从DOM中删除swf元素

    就代码而言,这是使用Zeh Fernando's blog上描述的技术 由Andreyu修改为包括删除DOM元素:

    // Based on work by Zeh Fernando: http://zehfernando.com/2011/getting-the-swfs-html-objectembed-id-from-within-the-flash-movie-itself/
    
    function getSWFObjectName(): String {
        // Returns the SWF's object name for getElementById
    
        // Based on https://github.com/millermedeiros/Hasher_AS3_helper/blob/master/dev/src/org/osflash/hasher/Hasher.as
    
        var js:XML;
        js = <script><![CDATA[
            function(__randomFunction) {
                var check = function(objects){
    
                        for (var i = 0; i < objects.length; i++){
                            if (typeof(eval("objects["+i+"]." + __randomFunction)) != undefined) {
                                return objects[i].id;
                            }
                        }
                        return undefined;
                    };
    
                    return check(document.getElementsByTagName("object")) || check(document.getElementsByTagName("embed"));
            }
        ]]></script>;
    
        var __randomFunction:String = "checkFunction_" + Math.floor(Math.random() * 99999); // Something random just so it's safer
    
        ExternalInterface.addCallback(__randomFunction, getSWFObjectName); // The second parameter can be anything, just passing a function that exists
    
        return ExternalInterface.call(js, __randomFunction);
    }
    
    // Function to remove the SWF from the webpage
    function destroyEverything(event:MouseEvent): void {
    
        var js:XML;
        js = <script><![CDATA[
            function(__SWFContext) {
    
                var element = document.getElementById(__SWFContext);
                element.parentNode.removeChild(element);
    
            }
        ]]></script>;
    
    
        ExternalInterface.call(js, getSWFObjectName());
    }
    
    
    // Add function to click event of button
    close_button.addEventListener(MouseEvent.CLICK, destroyEverything);
    

答案 1 :(得分:0)

如果unloadMovie对您来说足够了,您可以直接删除舞台上的所有内容:

//In button click handler, call "removeEverything" function
//function onClickClose(e:MouseEvent):void{
//    removeEverything()
//}
//As a result you will get empty stage

function removeEverything():void {
    while (stage.numChildren) {
        stage.removeChildAt(0);
    }
}