ActionScriptで使うlog関数のエラー対策

ActionScript3で使うと便利なライブラリでlog関数があります。

log(s);

で呼び出したときに、Firebugがインストールされてあると、console.log(s)が実行される仕掛けです。

ただし、この関数はFirebugがインストールされてあることが前提のものなので、たとえばIEを利用している場合は表示がおかしくなる場合があります。(真っ白になったり。)なので、console.logを呼び出す際にうまくラップしてあげた方がベターです。たとえばこんな感じ。

package {
  import flash.external.ExternalInterface;
  import flash.utils.getQualifiedClassName;

  public function log(... args):void {
    var inspect:Function = function(arg:*, bracket:Boolean = true):String {
        var className:String = getQualifiedClassName(arg);
        var str:String;

        switch(getQualifiedClassName(arg)) {
            case 'Array':
              var results:Array = [];
              for (var i:uint = 0; i < arg.length; i++) {
                  results.push(inspect(arg[i]));
              }
              if (bracket) {
                str = '[' + results.join(', ') + ']';
              } else {
                str = results.join(', ');
              }
              break;
            case 'int':
            case 'uint':
            case 'Number':
              str = arg.toString();
              break;
            case 'String':
              str = arg;
              break;
            default:
              str = '#<' + className + ':' + String(arg) + '>';
        }
        return str;
    }
    
    var r:String = inspect(args, false);
    trace(r)
    ExternalInterface.call('function(){ if(typeof console == \'object\' && typeof console.log == \'function\') return console.log.apply(this, arguments)}', r);
  }
}

console, console.logの存在判定してるだけですけども、忘れて素のlog関数をコードに入れっぱなしにしておくと思わぬハマり方をする場合もあると思うので、こんな風に予防線張っておくのもいいかと思います。

関連広告

Trackbacks:0

TrackBack URL for this entry
http://blog.katsuma.tv/mt-tb.cgi/117
Listed below are links to weblogs that reference
ActionScriptで使うlog関数のエラー対策 from blog.katsuma.tv

Home > ActionScript > ActionScriptで使うlog関数のエラー対策

Search
Feeds

Return to page top