有没有办法使用Flash(CS3 + AS3)来确定发布的swf是在调试播放器中还是在Flash的调试模式下运行?
我知道,Flex提供的能力设置不同的构建目标(发布/调试),并可以使用类似CONFIG::debug
的#ifdef
风格入选的代码在编译时.
我想象的东西System.isDebug()
却找不到任何东西.我想使用它,因为我的应用程序中有调试功能,我绝对不希望在生产环境中可用.
查看本课程http://blog.another-d-mention.ro/programming/how-to-identify-at-runtime-if-swf-is-in-debug-or-release-mode-build/
该类提供了两个相关(和不同)的信息:
SWF是使用-debug开关构建的(编译了调试符号)?
Flash播放器是否是调试播放器(能够显示错误等)?
Capabilities.isDebugger仅回答第二个问题 - 是运行Flash调试播放器的用户.在您的情况下,要在调试版本上为应用程序的某些部分提供门控,您需要-debug构建检查(然后不要将-debug构建交付到生产中).
但请注意,这两项检查都是运行时检查.在调试代码周围使用条件编译(也称为CONFIG :: debug)仍然是一个好主意,因为它将确保在最终的SWF中不会传递可能敏感的调试代码,从而使其尽可能小且安全.
我正在复制引用的代码,以防博客链接出现故障:
package org.adm.runtime { import flash.system.Capabilities; public class ModeCheck { /** * Returns true if the user is running the app on a Debug Flash Player. * Uses the Capabilities class **/ public static function isDebugPlayer() : Boolean { return Capabilities.isDebugger; } /** * Returns true if the swf is built in debug mode **/ public static function isDebugBuild() : Boolean { var stackTrace:String = new Error().getStackTrace(); return (stackTrace && stackTrace.search(/:[0-9]+]$/m) > -1); } /** * Returns true if the swf is built in release mode **/ public static function isReleaseBuild() : Boolean { return !isDebugBuild(); } } }