我正在尝试在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
功能?
答案 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 第二段似乎可以解决您的问题。