如何从Flash Player 9(而不是10)干净地卸载Adobe Captivate SWF

时间:2009-11-13 21:01:05

标签: flash memory loader adobe-captivate

为什么Adobe不遵循他们自己的建议并让Captivate swf听取自己的UNLOAD事件,并清理所有的定时器,事件监听器,外部引用等。

我发现,一旦装入Loader ,将Flash Captivate swf从Flash播放器的内存中取出后非常困难。显然,unloadAndStop方法在Flash Player 9中不可用,所以请不要提及,除非你有相当于flash Player 9中可用方法的actionscript源代码。

我尝试将Loader.content [“rdcmndRewindAndStop”]设置为1,以使Captivate文件倒带并停止。这很有用,但是在卸载内容之后我在调试器输出中看到内容仍在内存中响应某些事件:

TypeError: Error #1009: Cannot access a property or method of a null object reference.
at captivate.Veela_AS3::rdAVM1SwfLoader/getLoadBase()
at captivate.Veela_AS3::rdAVM1SwfLoader/onload()
at captivate.Veela_AS3::rdAVM1SwfLoader/initItemVariables()
at captivate.Veela_AS3::rdItem/frame1()

2 个答案:

答案 0 :(得分:1)

即使使用Flash Player 10和unloadAndStop方法没有发生任何事情,但是正在加载迷人的电影,内存使用被追踪到文本字段,并强制垃圾收集,我可以看到captivate文件不会卸载,甚至在最简单的情况

我正在考虑将这些文件放入并从一个单独的安全域,服务器的子域中加载它们并尝试这样做。如果有人取得了成功,我想知道。

谢谢,

kb的

答案 1 :(得分:0)

最近不得不处理同样的问题,我的任务是更新闪存"内容播放器"也是在flash中制作的。问题是他们现在想要播放已发布为SWF的Captivate内容。

我修复了Captivate卸载问题,将它们加载到另一个flash文件的副本中。

所以我有:

  • ContentPlayer.fla
  • CaptivateLoader.fla
  • Captivate.cptx

每当需要加载新的Captivate时,ContentPlayer会加载CaptivateLoader.swf的新副本,并告诉它加载Captivate.swf。当contentPlayer卸载以前的CaptivateLoader.swf时,它加载的任何东西都会被它破坏。