Adobe 可以告诉Flash播放器使用AVM1而不是AVM2吗?

Adobe 可以告诉Flash播放器使用AVM1而不是AVM2吗?,adobe,flash,flashvars,Adobe,Flash,Flashvars,据我所知,Adobe Flash Player有两个ActionScript虚拟机。AVM1和AVM2。它应该检测swf是否包含ActionScript 1/2或ActionScript 3,并自动选择适当的虚拟机。Flash Player 10.0.40+.x的最新版本打破了我们最古老的内容。我们推测它没有正确检测版本,因为flashlog.txt显示了大量关于“未声明”变量的警告。我们最早的代码使用ActionScript1和2,因此所有变量当然都未按AVM2标准声明。因此,我们想知道,除了

据我所知,Adobe Flash Player有两个ActionScript虚拟机。AVM1和AVM2。它应该检测swf是否包含ActionScript 1/2或ActionScript 3,并自动选择适当的虚拟机。Flash Player 10.0.40+.x的最新版本打破了我们最古老的内容。我们推测它没有正确检测版本,因为flashlog.txt显示了大量关于“未声明”变量的警告。我们最早的代码使用ActionScript1和2,因此所有变量当然都未按AVM2标准声明。因此,我们想知道,除了重新编译10年的产品,让最新的Flash Player运行我们的产品之外,我们是否能做点什么。一个想法是通过FlashVar传递一个版本号,我希望有人能确定这是否值得研究。

另外,你知道如何确定swf包含AVM1还是AVM2吗?swf本身不包含(a)ActionScript(V)irtual(m)achine;但是,您可以通过将swf加载为字节并解析出第4个字节以获得版本号来识别目标版本。我是在加载旧主权财富基金时这样做的,旧主权财富基金的结构是立即开始运作,但我不再希望在新框架中立即运作。此人的站点演示如何操作文件版本。获取目标播放器的版本号并不能告诉您内容是否为AVM1或AVM2内容。字节码是actionscript 2还是actionscript 3将决定这一点。此外,即使内容是actionscript 3,主实例是AVM2实例,swf也可以加载AS1/2(avm1)字节码,因此将调用avm1来处理该字节码。所以不幸的是,版本号不能帮助你确定字节码是AVM1还是AVM2。而且我也不确定问题是你所想的。不管ActionScript1和ActionScript2在动态类型方面有多松散,flashlog都将显示这些类型的警告。自然界中的AS1和AS2与AS3极性相反。AS3是一种严格的类型化语言,AS1/2是动态的,只是简单地不关心类型,一切都只是一个对象。因此,这些警告与avm1/2无关,它们只是关于编码实践的警告,除非您使用调试器播放器,否则您永远不会看到这些警告。