//////////////////////////////////////////// // //wonderfl用traceクラス //safariだと新しいwindowがパカパカ開く //ウザイ //コード作成中も実行可能 // //参考 //http://barmamutha.net/?p=212 //http://wonderfl.net/c/j7MQ // //////////////////////////////////////////// package { import flash.display.Sprite; public class LC extends Sprite { private var tr: OnlineTrace; public function LC() { tr = new OnlineTrace("myConnect"); //trace用に別ウインドウを開く tr.open(); //trace String tr.send("hoge"); //trace 計算式 tr.send(1+1); //trace 演算 var a:uint = 1; tr.send(a==1); //trace Array var ar:Array = new Array("1","2","3"); tr.send(ar); //trace Object var sp:Sprite = new Sprite(); tr.send(sp); tr.send(LC); } } } //////////////////////////////////////////// // //trace用クラス // //////////////////////////////////////////// import jp.nium.utils.ArrayUtil; import jp.nium.utils.ClassUtil; import jp.nium.utils.ObjectUtil; import flash.net.navigateToURL; import flash.net.URLRequest; import flash.net.LocalConnection; import flash.events.StatusEvent; import flash.utils.Timer; import flash.events.TimerEvent; import flash.system.Security; class OnlineTrace { private var _connect:LocalConnection; private var _id:String; private var _url:String; public function get message():* { return _message; } public function set message( value:* ):void { _message = value; } private var _message:*; private var _sendMessage:Array = new Array(); private var _sendCount:uint = 0; private var myTimer:Timer = new Timer(1000, 1); private var _connected = false; private var _opened = false; public function OnlineTrace(id:String) { _id = "barmamutha.net:" + id; _url = "http://barmamutha.net/swf/tracewindow.html?" + id; _connect = new LocalConnection(); _connect.addEventListener(StatusEvent.STATUS,function(event:StatusEvent):void { switch (event.level) { case "status": //接続(ウインドウが開いたか)チェック !_connected ? _connected = true : null ; break; case "error": //_trace() break; case "warning": break; } }); myTimer.addEventListener(TimerEvent.TIMER_COMPLETE, _trace); } public function open() { navigateToURL(new URLRequest(_url), "newwin"); _opened = true; } public function send(message:*) { this.message = message; switch ( true ) { case _message is Function : { setMessage( _message.apply( this ) ); break; } case _message is Array : { setMessage( ArrayUtil.toString( _message as Array ) ); break; } case ClassUtil.getClassName( _message ) == "Object" : { setMessage( ObjectUtil.toString( _message as Object ) ); break; } default : { setMessage( _message ); } } } private function setMessage(message:String):void { //trace(message) _sendMessage.push(message); _trace(); } private function _trace(e:*=null):void { myTimer.stop(); if(_connected && _opened){ while(_sendCount < _sendMessage.length){ _connect.send(_id, "makeCircle", _sendMessage[_sendCount]); _sendCount++; } }else { _connect.send(_id,"connectCheck"); reTry() } } private function reTry():void { //ウインドウオープン時のタイムラグがあるので何度かトライする myTimer.start(); } } オンラインtrace