可以通过 Javascript 控制 SWF 吗?
Posted
技术标签:
【中文标题】可以通过 Javascript 控制 SWF 吗?【英文标题】:Possible to control SWF through Javascript? 【发布时间】:2011-06-07 05:20:38 【问题描述】:情况如下:
客户希望循环播放的 SWF 文件在重新开始播放之前暂停两秒钟(这是一个不错的徽标构建动画,但徽标不会在屏幕上停留很长时间,因为电影会重复,因此用户无法长时间看到徽标。这无关紧要,但很好的背景故事。)
他们为我提供了 SWF 文件,但没有提供 FLA。当我询问 FLA 时,我被告知包含 FLA 的硬盘已崩溃,无法找回。所以,这几乎是一条死胡同。
在我去尝试反编译 SWF 和所有有趣的东西之前,我想知道是否有任何方法可以使用 html 和 javascript 来完成。那就是:
-
有 SWF 循环
在电影重新开始前暂停两秒钟
你怎么看?
【问题讨论】:
是的,真的做不到。 flash 电影需要 javascript 的钩子来告诉它执行操作。反编译你最好的选择。 【参考方案1】:这在 javascript 中是不容易实现的,但是如果你将 swf 加载到另一个 swf 中就很容易了。然后,您可以访问原始 swf 的主时间线,并且可以控制它。如果你想控制一个名为 targetMovie.swf 的电影,你可以这样做:
var loader:Loader = new Loader();
loader.load(new URLRequest("targetMovie.swf"));
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
addChild(loader);
var logoMovie:MovieClip;
function onComplete(evt:Event):void
logoMovie = MovieClip(loader.content);
// call pauseMovie at end of timeline
logoMovie.addFrameScript(logoMovie.totalFrames-1, pauseMovie);
function pauseMovie():void
logoMovie.stop();
// delay for two seconds;
setTimeout(function()
logoMovie.play();
, 2000);
【讨论】:
真是个好主意。我什至没有考虑创建另一个加载该文件的 Flash 文件。唯一的缺点是有一个加载事件,因此您必须提供反馈并且用户必须等待。不过很好的解决方案。 另外,应该注意的是,工作中有人建议导入 After Effects 并以这种方式输出 SWF。这实际上也很有效。【参考方案2】:您可以使用 swfObject 在 javascript 中完全模拟这一点。您需要计算动画的时间长度,添加两秒,然后将其设为脚本重新启动之前的时间。这是 homestarrunner 介绍的一个工作示例:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
<script type="text/javascript" src="http://swfobject.googlecode.com/svn-history/r409/trunk/swfobject/swfobject.js"></script>
<script type="text/javascript">
$(document).ready(function()
startSwf()
)
var restartTime = 24500 //in milliseconds
function stopSwf()
swfobject.removeSWF("swfLoop");
startSwf();
function startSwf()
$("body").append("<div id='swfLoop'></div>");
swfobject.createSWF(data:"http://homestarrunner.com/newintro.swf", width:400, height:300, null, "swfLoop");
setTimeout('stopSwf()', restartTime);
</script>
</head>
<body></body>
</html>
在此处插入:http://htmledit.squarefree.com/
【讨论】:
我喜欢你使用 jQuery,但不确定它是否足够可靠。我觉得,如果 Flash 或类似的东西出现延迟,它很容易不同步。【参考方案3】:试试这个http://www.permadi.com/tutorial/flashjscommand/
【讨论】:
以上是关于可以通过 Javascript 控制 SWF 吗?的主要内容,如果未能解决你的问题,请参考以下文章