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/