【问题标题】:Why doesn't my ActionScript3 call my JavaScript function?为什么我的 ActionScript3 不调用我的 JavaScript 函数?
【发布时间】:2011-02-28 19:04:49
【问题描述】:

我有一些播放电影剪辑的动作脚本。当影片剪辑结束时,我希望 Javascript 从页面中删除 Flash 对象。我似乎无法让它工作。

当我在 Flash 中测试动作脚本时,我没有遇到任何编译错误,而且我的跟踪都在我预期的时候执行。我也没有收到任何 javascript 错误,认为 RemoveFlash() 函数永远不会被调用。

这是我的 ActionScript3:

import fl.video.*;
import flash.external.ExternalInterface;

MyPlayer.addEventListener(VideoEvent.COMPLETE, completePlay);

MyButton.addEventListener(MouseEvent.MOUSE_DOWN, interruptPlay);

function completePlay(e:VideoEvent):void
{
    trace("video completed");
    ExternalInterface.call("RemoveFlash");
}

function interruptPlay(e:MouseEvent):void
{
    trace("video interrupted");
    MyPlayer.stop();
    ExternalInterface.call("RemoveFlash");
}

这是我的 JS:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <script language="javascript" type="text/javascript" src="/Scripts/jquery-1.5.min.js"></script>
    <script type="text/javascript" src="/Scripts/swfobject2.js"></script>

    <script type="text/javascript">
        $(document).ready(function(){

            // Remove GreenPlayer
            function RemoveFlash()
            {
                alert("remove");
                $("#GreenPlayer").remove();
            }

            // add greenscreen swf
            var flashvars = {};
            flashvars.AllowScriptAccess="always";

                    var params = {};
            params.wmode = "transparent";
            params.AllowScriptAccess = "always";

            swfobject.embedSWF("/swf/GreenPlayer2.swf", "GreenPlayer", "200", "400", "8.0.0", '', flashvars, params);

        });
    </script>
</head>
<body>
        <div id="GreenPlayer">asd</div>
</body>
</html>

有什么想法吗?

【问题讨论】:

  • 如果你删除$(document).ready(function(){});,会发生什么?
  • 那么 swfobject 将无法正常工作,因为它会尝试将 flash 对象写入尚不存在的 div 中。

标签: javascript flash actionscript-3 actionscript


【解决方案1】:

也许RemoveFlash() 函数超出了 swf 的范围,因为您将它放在匿名函数中。尝试将RemoveFlash() 函数移动到全局范围($(document).ready 之外),看看是否有帮助。

【讨论】:

  • 嗯...我明白了。这很有趣,它带来了一个小问题。在文档加载完成之前我无法定义函数,因为我需要与 DOM 交互。
  • 是的,您可以在加载 DOM 之前定义函数。只是在 DOM 准备好之前不要调用它。
【解决方案2】:

您的 RemoveFlash 函数是您的就绪处理程序的本地函数,并且 flash 正在尝试调用名为 RemoveFlash() 的全局函数。将它移到负载处理程序之外,它会工作......

<script type="text/javascript">
    function RemoveFlash() {
       $("#GreenPlayer").remove();
    }      

    $(document).ready(function(){
        // add greenscreen swf
        var flashvars = {AllowScriptAccess: "always"};
        var params = {
           wmode: "transparent",
           AllowScriptAccess: "always"
        };
        swfobject.embedSWF("/swf/GreenPlayer2.swf", "GreenPlayer", "200", "400", "8.0.0", '', flashvars, params);

    });
</script>

【讨论】:

    猜你喜欢
    • 2014-03-15
    • 1970-01-01
    • 1970-01-01
    • 2014-12-01
    • 1970-01-01
    • 2023-03-08
    • 2017-02-17
    • 1970-01-01
    相关资源
    最近更新 更多