确定swf是否处于“调试”播放器或模式

时间:2008-10-09 00:25:48

标签: flash actionscript-3 debugging

有没有办法使用Flash(CS3 + AS3)来确定发布的swf是在调试播放器中还是在Flash的调试模式下运行?

我知道Flex提供了设置不同构建目标(发布/调试)的能力,并且您可以在编译时使用CONFIG::debug之类的内容来#ifdef样式包含代码。

我想象的是System.isDebug()但找不到任何东西。我想使用这个,因为我的应用程序中有调试功能,我肯定不希望在生产环境中可用。

1 个答案:

答案 0 :(得分:20)

查看此课程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构建检查(然后不要将-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();
    }
  }
}