2009-01-06 60 views
2

我有一个用ActionScript编写的旧程序,编译在Flash 6中。它加载了10个其他模块,其中3个是用Actionscript 2编写的,在Flash中编译8.原始程序被嵌入到html中,并且当html文件在web服务器上运行时完美工作。但是,如果我只是将HTML文件拖到我的浏览器,则不会加载3个AS2模块。或者更准确地说,他们确实加载了,但我无法访问他们的功能。 所有模块都使用“本地回放安全性=仅访问本地文件”进行编译。 我正在使用Flash CS3编译所有模块。 没有将主加载模块重写为AS2,有什么我可以做的解决这个问题? 谢谢Flash安全问题:将Flash 8 AS2模块加载到Flash 6 AS1模块时出现问题

回答

1

Flash的安全模型的规则有点神秘,但它似乎是对付跨脚本限制。一种选择可能是解决它,例如通过安装Apache(或其他)并通过http://localhost...而不是file://...访问内容。但是,安全问题也可以解决。

首先,您可能需要查看this article,特别是该页面的中间部分,该页面列出了允许一个SWF访问另一个SWF的功能的基本规则。如图表所示,使所有访问工作的最简单方法是让所有内容在“本地信任”沙箱中运行。如何做到这一点涵盖了同一文章的部分内容page 4

+0

在这种情况下,我必须排除选项1 - 尽管我知道这样做解决问题。 看完文章还没有散尽了一切,虽然我已经无意中发现了部分答案。如果我使用Flash 7选项发布AS2模块,那么我可以调用它们的函数并获得大约90%的工作量。 – 2009-01-06 05:46:28

1

我不确定这是否与您的问题有关,但混合AVM1 SWF文件可能会有问题。

如果在没有在输出设置中选择“针对版本6r65进行优化”选项的情况下针对版本6编译Flash SWF,则生成的字节码与针对v6r65或更高版本编译的AVM1 swf文件(特别是在使用AS2时大部分不兼容语言而不是AS1)。

这是因为对这些早期版本进行编译时,对_global属性的任何引用都指向不同的位置,因此_global命名空间中定义的属性对于针对以后版本的电影不可见,反之亦然。

鉴于类定义为居住在_global命名空间中的变量,混合那些针对性对于处在两侧6r65版本的SWF文件时,这可以证明是非常有问题的。

我记得通过复制在SWF文件中的一个,这是其他SWF文件可见位置_global参考解决此黑客攻击。

(预6r65)

class SomeClass 
{ 
    // 
} 
... 
_global.someProp=123; 

_level0.globalCopy=_global 

(在岗6r65)

trace(SomeClass) //undefined 
trace(_global.someProp) //undefined 
trace(_level0.globalCopy.SomeClass) //[object object] i.e. defined 
trace(_level0.globalCopy.someProp) //123