2010-10-03 71 views
0

只是在寻找的东西的想法(试图使这个描述较短,但没有成功):替换SWF瞬间

我希望能够瞬间更新的SWF文件 - 我的意思是不刷新直到它的全部新版本完全准备就绪,然后立即替换浏览器窗口中的现有内容(而不是现有页面被删除,然后灰色屏幕,然后增量重新构建页面)。

其实我现在有一个方法来实现这个目标:swf上的所有东西都放在一个画布上,所以我在幕后创建一个新画布,用所有新控件重新填充它,然后当所有东西都准备好时,显示这个新的画布和摧毁旧的。

但奇怪的是,实际上这样做需要两倍的时间来构建新页面,而不是将新版本的新版本放在独立的swf上并显示新的网页。 (所以2秒对1秒)。但是,如果新版本位于其自己的网页上,那么您将使现有页面消失,被灰色屏幕取代,然后是新页面的增量构建(增量构建仅需要一秒钟 - 但仍不是效果我去。)

基本上我正在寻找的是创建一个新的SWFLoader包含新版本,然后说,“当新的SWFLoader中的应用程序发送某个信号时,将整个浏览器窗口中现有的swf应用程序与此新SWFLoader的内容“。

或者,如果甚至有一种方法我不知道现在只用html来完成所有这些操作(即只在新页面完全准备就绪时立即替换浏览器窗口中的整个html页面),那么也会很棒。

+0

swf在启动时通过xml文件进行配置 - 这就是我所说的“创建它的新版本”。正如我所说的,实际上创建这样一个新版本的swf并从头开始重新加载比我尝试重新配置现有的swf更快。但如果我从零开始重新加载它,我还没有找到一种方法来立即用它替换现有的swf(没有灰色屏幕等) – Mark 2010-10-03 20:08:35

回答

0

您似乎在建议使用shell/preloader,例如,一个最小的SWF处理外部SWF的加载/卸载/转换。我觉得你很说明它你自己实际上:)

事情要记住(从我的脑海的顶部):

  • 请确保您有在启动/停止的过程,并释放完全控制内存在卸载旧的SWF之前。在这种情况下,一个好的做法是共享一个通用的接口,让您的文档类可以被shell一致地访问。 (例如启用/禁用/缩放)
  • 请小心使用相同或相同名称的类,因为首先加载的类不会被覆盖。
+0

有一件事我从来没有想过,并且让我无法实现我想要的东西:我希望子SWF能够在父应用程序中调用公共函数,反之亦然*无论是否从服务器访问任何一个*(即两者都可以在本地文件系统中)。我尝试类似于“this.parent ... SystemManager.getDefinitionbyID(”funcX“)(...)”。没有任何反应,所以我为子SWFLoader设置了trustContent = true,但之后根本无法加载,所以我阅读了关于跨域策略文件,并按照描述设置了一个 - 完成任何操作。 – Mark 2010-10-04 01:59:33

0

我想出了一个方案,我的应用程序克隆自己在一个新的SWFLoader在同一个应用程序。这显然更快(即只是在新的SWFLoader中重新创建整个重新配置的应用程序,而不是重新配置已经加载的应用程序)。可能与FP优化新应用程序的加载过程有关。

基本上我第一次运行我的应用程序,它只是创建一个将保存实际应用程序的子SWFLoader。然后,如果需要重新配置该应用程序,则会创建一个新的子SWFLoader,并使用'this.addChildAt(0)'作为顶级子项添加。 (所以它暂时被旧的SWFLoader遮掩。)当新的SWFLoader完成加载时,它通过调用'this.parent.parent.parent.parent.removeChildAt(1)'来删除以前的SWFLoader。删除旧的SWFLoader会立即显示新的SWFLoader。我必须将这些父母串起来,以便在实际运行新SWFLoader的应用程序中访问两个SWFLoader的顶级父项。 (SWFLoader中的应用程序是从SWFLoader的父项中移除的四个父项)。我想没有人知道我在说什么,但至少我解决了我的问题。