在swf加载后执行js - Captivate

时间:2014-01-23 08:26:24

标签: javascript flash

我正在尝试在swf文件加载完成后执行一些Javascript。

虽然我确实找到了一篇很棒的帖子,How to check if a swf is loaded using JavaScript with swfobject?

但我不确定如何使用pipwerks建议,因为Adobe Captivate嵌入swfs的方式有所不同,请参阅下面的代码。

    //Embed SWf using the SWFObject library
    var so = new SWFObject(CONFIG.FILENAME, CONFIG.SWFOBJ_ID, 
                                    CONFIG.COURSE_WIDTH, CONFIG.COURSE_HEIGHT, 
                                    CONFIG.FPVERSION, "#CCCCCC");

        so.addParam("quality", "high");
        so.addParam("wmode", CONFIG.WMODE);
        so.addParam("bgcolor", CONFIG.BGCOLOR);
        so.addParam("menu", "false");
        so.setAttribute("name", CONFIG.SWFOBJ_NAME);
        so.setAttribute("redirectUrl", CONFIG.REDIRECT_URL);
        so.addParam("AllowScriptAccess","always");
        so.write(CONFIG.TARGET);

我会在哪里放置callback功能?

5 个答案:

答案 0 :(得分:4)

您使用的是旧版本的SWFObject(1.?),它不支持版本2中提供的回调功能。您可以看到您使用的版本支持的参数here

如果您将SWFObject更新为latest version (2.2),则可以使用embedSWF函数传递回调函数:

swfobject.embedSWF("movie.swf", "flashcontent", "550", "400", "9", false, false, false, false, callback); 

最新版本支持您当前传递给SWFObject的所有其他属性,因此,假设您已经控制了HTML标记和JavaScript(听起来像您这样做),请升级到最新版本的图书馆可能是你最好的选择。

答案 1 :(得分:3)

我宁愿使用旧式解决方案 - 从flash集onLoad内部调用javascript函数。 如果你动态加载电影,你可以创建preroader.swf并将电影的url作为变量传递。 这是更稳定的解决方案

答案 2 :(得分:3)

如果您使用的是最新版本,则可以将回调设置为net.uk.sweet描述:

swfobject.embedSWF("movie.swf", "flashcontent", "550", "400", "9", false, false, false, false, callback);

您应该能够检测SWF文件本身何时完成加载,而不是担心ActionScript回调。

要做到这一点,首先要弄清楚如何阻止对象或嵌入元素。最简单的方法是添加一行,以便为元素添加ID。

在上面发布的代码块中,so.write之前添加:

so.addAttribute('id', 'myswf');

这应该将id="myswf"添加到实际生成的HTML中。

然后,您要添加一个事件侦听器,它会抓取此值并添加一个load事件。这应该在so.write行之后。

var obj = document.getElementById('myswf');
obj.addEventListener('load', /* callback goes here */);

还有一个潜在的边缘案例你必须应对。如果已加载SWF,则可能不会触发事件侦听器。有两种方法可以解决这个问题。

1)在CONFIG.FILENAME之后,添加一个随机字符串。这将强制视频始终重新加载。这不是一个很好的解决方案,因为它会强制视频始终重新加载,但如果SWF很小,它就可以工作。它看起来像这样:

var so = new SWFObject(CONFIG.FILENAME + '?' + (new Date()).getTime(), CONFIG.SWFOBJ_ID, 
                                    CONFIG.COURSE_WIDTH, CONFIG.COURSE_HEIGHT, 
                                    CONFIG.FPVERSION, "#CCCCCC");

(使用(new Date()).getTime()为随机字符串生成唯一的时间戳。)

2)将SWFObject更新为最新版本。不幸的是,对于对象,我不知道如何解决这个问题。根据您的具体情况,您可以做一些其他技巧,但我们需要更多关于您想要用它做什么的信息。

答案 3 :(得分:1)

SWFObject对象有一个属性PercentLoaded

请参阅本教程以帮助实施:link

答案 4 :(得分:1)

你好运! swfjsPreLoader 第二段似乎可以解决您的问题。