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

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

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

//使用SWFObject库嵌入SWf
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”,“始终”);
so.write(CONFIG.TARGET);

我将callback函数放在哪里?

最佳答案

如果您使用的是最新版本,则可以按照net.uk.sweet中所述将回调放入:
swfobject.embedSWF("movie.swf", "flashcontent", "550", "400", "9", false, false, false, false, callback);
不必担心ActionScript回调,您应该能够检测SWF文件本身何时完成加载。

为此,您首先必须弄清楚如何锁定对象或嵌入元素。最简单的方法是添加一行,以便您可以向该元素添加ID。

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

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

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

然后,您想要添加一个事件侦听器,该侦听器将获取此值并添加一个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更新到最新版本。不幸的是,对于对象,我不知道如何解决此问题。根据您的实际情况,您可以采取其他一些技巧,但是我们需要有关您要如何处理的更多信息。

关于javascript - SWF加载后执行JS-着迷,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21302928/

10-12 00:24
查看更多