我在AS3中定义了一个函数,它将通过JavaScript从客户端调用。 AS3功能只需在调用时在SWF屏幕上打印一些值。
当我将onclick事件处理程序设置为按钮并调用AS3函数时,它工作正常。但是我想在页面加载后立即调用此AS3函数。我在项目中使用jQuery,并将调用放在$(document).ready()中的AS3函数中,但是这给了我在FF2 firebug中的以下错误:
getFlashMovie(“my_movie_name”)。my_as3_function不是函数
然后,我尝试通过设置onLoad事件处理程序来调用,但这也不起作用 - 产生相同的错误。
所以,我的问题是,一旦页面加载,我该如何自动调用AS3函数?在我的项目中,我需要在页面加载后将一些客户端初始化信息传递给flash。
答案 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.*;
来使一切正常。