所以我在这个项目中有几个SWF,我需要找到一种方法来确保只能加载其中一个SWF的单个实例。
例如,您无法在2个不同的浏览器中打开2个不同的应用程序SWF,或同时在同一台计算机上打开选项卡。
LocalConnection似乎是解决此问题的最佳解决方案,但是,我们遇到了Internet Explorer 9的问题。
private var lc:LocalConnection = new LocalConnection()
try
{
lc.connect ("Main");
//continue
}
catch (e:Error)
{
//swf exists.
}
似乎IE9似乎没有立即破坏SWF。刷新页面可以显示“Swf Exists”,几秒钟之后,刷新可以解决问题。
有谁知道为什么会这样?
失败了。有没有人知道是否有退出事件?例如,当SWF终止时,有没有办法可以捕获该事件并在终止前手动关闭本地连接?
onApplicationExit(e:Event): void
{
lc.close();
}
最后,是否有人可以使用任何其他方法来尝试实现单个swf实例?
答案 0 :(得分:1)
无论一个SWF是否已经打开,您都可以使用SharedObject来存储标志。如果该标志设置为true,则在启动时关闭第二个swf。
并在第一个SWF关闭时重置标志。 可能比LocalConnection更容易处理。
修改强>
从评论中添加我的东西:
因为sharedobjects没有你可以设置的生命周期,也许你可以使用某种超时:为你的SWF创建一个唯一的ID,并每隔5秒将ID和时间码写入SharedObject。每当SWF打开时,您比较ID并检查时间码是否超过5-10秒。如果是这样,请关闭它,如果不覆盖sharedobject。类似的东西...
答案 1 :(得分:0)
没有直接的方法可以使用flash捕获页面关闭事件,但javascript为您提供了一种方法。我会尝试以下方法:
将window.onbeforeunload javascript侦听器添加到您的网页,并使用它来调用Flash影片中的清理功能(这将立即关闭本地连接)。要让您的flash电影收听javascript调用,请查看ExternalInterface.addCallback。
答案 2 :(得分:0)
在每个加载的swf中,初始化该剪辑时设置静态变量。然后在主剪辑中,检查该变量是否不等于null。如果是这种情况,您已经加载了该swf,并且可以忽略该负载。
另外一个好处是,如果将静态变量的值设置为加载的swf的文档类,则还将引用加载的swf。