在页面加载时调用闪存外部接口AS3功能

时间:2009-03-24 18:46:32

标签: javascript flash actionscript-3

我在AS3中定义了一个函数,它将通过JavaScript从客户端调用。 AS3功能只需在调用时在SWF屏幕上打印一些值。

当我将onclick事件处理程序设置为按钮并调用AS3函数时,它工作正常。但是我想在页面加载后立即调用此AS3函数。我在项目中使用jQuery,并将调用放在$(document).ready()中的AS3函数中,但是这给了我在FF2 firebug中的以下错误:

getFlashMovie(“my_movie_name”)。my_as3_function不是函数

然后,我尝试通过设置onLoad事件处理程序来调用,但这也不起作用 - 产生相同的错误。

所以,我的问题是,一旦页面加载,我该如何自动调用AS3函数?在我的项目中,我需要在页面加载后将一些客户端初始化信息传递给flash。

8 个答案:

答案 0 :(得分:9)

您需要让闪存调用页面中的一个函数来通知它Flash已加载并初始化,然后将其用作入口点。

在闪光灯中:

ExternalInterface.call('flashReady');

在页面中:

<script>
function flashReady() {
   ..
}
</script>

答案 1 :(得分:2)

如果您使用swfObject嵌入SWF(无论如何都可能是个好主意),那么您可以使用它的addDomLoadEvent()函数,它允许您在SWF完全加载后执行某些操作

swfobject.addDomLoadEvent(function() {
   $("#swfobject").get(0).inited('you are loaded!'); 
});

答案 2 :(得分:1)

我不想在这里成为一个明智的人,但你是否在服务器上测试你的工作?

外部接口,addcallback不适用于本地文件系统,最终你可能需要添加:

flash.system.Security.allowDomain( 'http://localhost');

如果您在本地运行。

:P

答案 3 :(得分:0)

问题是当页面加载完成后Flash对象尚未初始化。从AS3内部执行此初始化可能会更安全。如果要从HTML页面传递值,请使用flashVars。

答案 4 :(得分:0)

几周前我自己遇到了这个问题。解决方案非常简单:)

首先,您需要在DOM中添加div

<div id="timewriter"><div>

您还将使用jQuery Timers plugin来计算加载时间。在准备之后,事情将变得非常容易。 以下代码将放在$(document).ready();

var movie = getFlashMovie('my_movie_name');

if(movie.PercentLoaded() != 100)
{
    $("#timewriter").everyTime(100, function () 
    {
        if(movie.PercentLoaded() == 100)
        {

            $("#timewriter").stopTime();
            //the movie is loaded, call here your functions; usually this happens if you don't use cache

        }
    });
}
else
{
    //the movie is loaded, call here your functions; usually you get here if you use cache
}

稍后编辑:小心HTML页面加载并不意味着加载了swf,这是在网页加载完成事件之后发生的。我的解决方案也基于jQuery javascript库。

答案 5 :(得分:0)

似乎答案的集合提供的答案最接近它的整体。

正如David Hanak所说,flash对象因为正在初始化而无法访问,但我不同意我们必须依赖flashvars,尽管我喜欢它们。

Tweakt是对的,但是在调用javascript中的函数后,调用调用回swf的javascript函数;通过这种方式,我们知道闪存已准备就绪,因为它发送了第一个电话。

答案 6 :(得分:0)

tweakt和Bogdan的答案都是可行的。如果您有权访问Actionscript,请使用tweakt的方法。如果你不这样做,请使用Bogdan's。我正在寻找除轮询之外的另一种选择(当你无法访问Actionscript时),但到目前为止我找不到一个。这里提到了一些事件:http://www.adobe.com/support/flash/publishexport/scriptingwithflash/scriptingwithflash_03.html但似乎没有人知道如何使用它们。

答案 7 :(得分:0)

为了完成,您还必须使用import flash.external.*;来使一切正常。