【问题标题】:Do all Flash swf files have inbuilt methods for interfacing with Javascript?是否所有 Flash swf 文件都具有与 Javascript 交互的内置方法?
【发布时间】:2011-02-05 16:17:48
【问题描述】:

我不使用 Flash,因此对它一无所知,但我的任务是将 swf 电影嵌入到网页中。我对 swf 的内部设计一无所知,只知道它播放的是一部短片。我想控制 swf 何时开始播放、倒带(它将无限播放),甚至可能将其缓存在浏览器中。它将是 Javascript 驱动的图像旋转的一部分,其中 <img> 元素将暂时替换为 swf 的 <object>

我的问题是 swf 文件在编译时是否具有内置的 Javascript 接口(我认为是 Actionscript?),还是这完全取决于作者决定包含此类代码?如果它取决于作者包含的代码,是否有任何可能的测试我可以运行以查看哪些方法可用?

【问题讨论】:

    标签: javascript interface flash


    【解决方案1】:

    有趣的问题。不幸的是,实际上并没有任何简单的答案 - 在 Flash 中有上百万种方法可以做任何事情,并且根据最初的开发人员做了什么,您可以尝试各种不同的方法。

    Flash Player 在本机 API 中提供了一个 ExternalInterface 方法,因此每个 Flash 应用程序都可以调用 javascript。如果开发者配置了它,你甚至可以在 flash 中注册一个内部回调方法来响应 javascript 命令——这样你就可以让它双向工作。

    也就是说,除非开发人员因为你想要它而专门把它放进去,否则他不太可能这样做,而且你无论如何也看不到它。

    根据 swf 的构建方式,您有几个选项。首先,您可以尝试将 LOOP=TRUE 参数添加到您的嵌入代码中(更多信息here)。如果这是一个基本的时间线动画,或者如果您的视频剪辑的帧已经转储到时间线上并且它使用 Flash 自己的动画工具来播放它,那么这可能就是您所需要的。

    但是,如果这不起作用,事情就会变得有点复杂。您可以尝试使用任意数量的 Flash 反编译器之一来反编译 .swf - 这可能会让您深入了解那里有哪些方法、它的结构等。不过,这并不是一门很好的科学 - 您喜欢一些反复试验。

    如果在自省 swf 的过程中,您了解到它有一个名为“video”的对象,类型为“Video”,那么您可以编写一个包装器 .swf,加载您的目标 swf 并拥有您的包装器接口使用 JavaScript。如果您正在寻找的只是一个循环,那么视频对象甚至可能具有自动重复属性或类似的效果。

    这有点啰嗦,但我希望它有所帮助。如果您有任何问题,请发表评论!

    【讨论】:

    • 感谢您的回复 - 非常有用。从你说的我了解到,虽然Javascript可以调用Flash,但这只是在开发人员配置它的情况下,并且SWFs不共享通用API。对吗?
    • 对。 ExternalInterface 回调必须在 Flash 端设置,而不是在 javascript 端。 [嗯,它们必须在两边都设置 - 没有办法仅通过 javascript 来做到这一点。]
    猜你喜欢
    • 2019-10-02
    • 2013-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-09
    • 2011-07-11
    • 1970-01-01
    相关资源
    最近更新 更多