是否有办法(在javascript中)检测是否使用Flash Professional或Flex创建了嵌入式.swf。
我们有一个包含多个标签的页面,每个标签都可以包含.swf。所有选项卡都在同一个HTML文件中定义,当包含的选项卡变为活动状态时,javascript框架会在swf上调用 .rewind()和 .play()。
这适用于常规Flash动画,确保它们在打开选项卡时从头开始播放。然而,在使用Flex创建的swf上,倒带和播放会对Flex框架造成严重破坏,并且应用程序无法加载。
我们提出检测Flex的最佳方法是计算.swf具有的帧数。随着flex总是2.但这听起来不是最好的方式。
我们还尝试在Flex应用程序 preinitialize 事件中添加带有 ExternalInterface 的回调方法。不幸的是,这个事件在应用程序启动时很晚才被调用,javasctipt代码在Flex代码添加之前检查回调。
是否有其他方法可以检测(来自javascript).swf是否是使用Flex创建的?
答案 0 :(得分:1)
简短的回答,没有。 Flex IS Flash;它只是Flash上的一个附加层,可以提高开发效率。
但是,可能有一个解决方案,但我需要知道您是否自己创建了swfs,以及是否可以修改它们。如果可以,我会使用ExternalInterface callback通过在JS中调用该函数来“播放”你的swf(即document.getDocumentById('swfId').someFunction();
)。
另一种解决方案是让你的所有swfs在加载后立即播放,然后只在需要时加载它们(而不是预加载)。如果您需要“快退”,只需重新加载它们(如果您使用的是SWFObject,则应该很容易,只需删除并添加回来)。
答案 1 :(得分:0)
好的,回答我自己的问题, DownloadProgressBar (在第一帧中加载)可以自定义(重载)。
因此,这是自定义进度条,它为Javascript添加了一个isFlex()回调方法:
package flexidentifier {
import flash.external.ExternalInterface;
import mx.preloaders.DownloadProgressBar;
public class FlexIdentifierDownloadProgressBar extends DownloadProgressBar {
public function FlexIdentifierDownloadProgressBar() {
super();
ExternalInterface.addCallback("isFlex", callback);
}
protected function callback():String {
return "true";
}
}
}
不要忘记将其添加到应用程序:
<s:Application xmlns:s="library://ns.adobe.com/flex/spark" preloader="flexidentifier.FlexIdentifierDownloadProgressBar">
</s:Application>
如果Adobe的人员把它放在Flex框架中开始,那就太好了。