如何使用swfobject通知HTML容器SWF已完成

时间:2015-02-24 10:05:24

标签: html actionscript-3 flash

我将flash对象(swf文件)嵌入到HTML页面中。该对象使用as3编写,并使用Flash Builder构建。它的目的是展示一些动画,然后完成。

能够通知容器动画已经完成,但我找不到任何有效的东西对我来说非常重要。我正在使用swfobject version 2.2

在Chrome 40和IE 11上都试过。

HTML(示例):

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-type" content="text/html;charset=UTF-8">
    <script type="text/javascript" src="js/swfobject.js"></script>
    <script type="text/javascript">
        function flashFinished() {alert('finished!');}
    </script>
    <script type="text/javascript">
        var flashVars = {}
        var flashParams = {allowscriptaccess : 'sameDomain'}
        var flashAttributes = {id : 'myflash', name : 'myflash'}
        swfobject.embedSWF('myflash.swf', 'flashObject', '960', '720', '9.0.0', 'swf/expressInstall.swf',
                flashVars, flashParams, flashAttributes);
    </script>
</head>
<body>
    <div id="flashObject">
        <p>To view this page please make sure that an updated version of Adobe Flash Player is installed.</p>
    </div>
</body>

AS3(样本):

package
{
    public class myflash extends Sprite
    {
        public function myflash()
        {
            stage.scaleMode = StageScaleMode.NO_SCALE;
            stage.align = StageAlign.TOP_LEFT;
            startPlay();
        }
        private function startPlay() : void {
            // do whatever, then make sure function finishPlay is called in the end
        }
        private function finishPlay(event:TimerEvent) : void {
            if (ExternalInterface.available)
                ExternalInterface.call('flashFinished');
        }
    }
}

我的“flashFinished”函数永远不会被调用。任何人都可以建议我做错了什么?谢谢!

3 个答案:

答案 0 :(得分:1)

如果完成了Flash代码的工作并且您不再需要它,只需在as3中终止javascript:

var exitStr:String = "javascript:terminate()";
navigateToURL(new URLRequest(exitStr),"_self");

然后在HTML中添加一个onUnload函数,该函数将在此时调用:

onUnload="flashFinished();"

注意:我在swfobject v1.4中使用了这段代码,不确定v2.2

答案 1 :(得分:1)

为避免Flash播放器阻止您的本地swf访问外部URL(互联网,...)或与javascript或其他一些通常会触发安全沙箱违规错误的操作进行通信,您必须添加它( swf)到这样的受信任位置列表:

对于Flash Player PPAPI(如Opera和Chrome):

  • 右键单击浏览器中打开的swf,然后全局设置...

enter image description here

将打开this page

enter image description here

  • 然后,正如图片中所提到的,点击修改位置... 组合框,然后点击添加位置,这将为您提供此框:

enter image description here

您只需键入您的swf位置,或者它的父目录,或者只是像我在图像中所做的那样输入整个分区。尽量避免使用“浏览...”按钮,有时它不起作用(至少对我而言)。 确认并关闭页面并刷新swf。

对于Flash Player ActiveX(如IE)和NPAPI(如Firefox):

  • 右键单击浏览器中打开的swf,然后全局设置... ,您也可以转到系统控制面板并打开 Flash Player

enter image description here

  • 然后转到 高级 标签,然后点击 受信任的位置设置... 按钮:

enter image description here

  • 然后你必须使用 添加.. 按钮添加swf位置&gt; 添加文件... 添加文件夹... 按钮&gt; 选择您的文件/目录或分区,然后按 确定 确认 并关闭所有对话框。

enter image description here

然后您只需刷新页面即可。

答案 2 :(得分:0)

由于当地环境,这实际上是一个安全问题,正如@akmozo所建议的那样。我进入了Flash Player的全局安全设置:

http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04.html

并添加树的根文件夹,将所有HTML页面/ SWF对象包含在允许的位置。所以现在它也在本地运作。