/**
* Copyright umhr ( http://wonderfl.net/user/umhr )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/SWcV
*/
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.UncaughtErrorEvent;
//import jp.mztm.umhr.logging.Log;
/**
* ...
* @author umhr
*/
public class WonderflMain extends Sprite
{
public function WonderflMain()
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
// entry point
addChild(new Canvas());
addChild(new Log(8, 80, 465-16, 465-80));
setGlobalErrorHandler();
}
public function setGlobalErrorHandler():void
{
loaderInfo.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, uncaughtErrorEvents_uncaughtError);
}
private var _prevMessage:String = "";
private function uncaughtErrorEvents_uncaughtError(e:UncaughtErrorEvent):void
{
var teemp:String = e.errorID +"," + e.type + "," + e.error;
if (_prevMessage != teemp) {
Log.trace(e.errorID, e.type, e.error);
errorType(e.error);
_prevMessage = teemp;
}
//e.preventDefault();
}
private function errorType(str:String):void {
//TypeError: Error #1085
if (str.indexOf("#") < 0) {
return;
}
var errorID:int = parseInt(str.split("#")[1]);
switch (errorID)
{
case 1085:
Log.trace("XMLエレメントが適切に終了していません。");
break;
case 1090:
Log.trace("XML パーサエラー :エレメントの形式が正しくありません。");
break;
case 1095:
Log.trace("XML パーサエラー :属性が終了していません。");
break;
case 1104:
Log.trace('属性 "type" (エレメント "bbb") は既に指定されています。');
break;
default:
Log.trace(errorID);
}
}
}
}
import com.bit101.components.CheckBox;
import com.bit101.components.InputText;
import com.bit101.components.PushButton;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.events.SecurityErrorEvent;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.system.Security;
//import jp.mztm.umhr.logging.Log;
/**
* ランタイムエラー - Adobe ActionScript® 3(AS3 )API リファレンス
* http://help.adobe.com/ja_JP/FlashPlatform/reference/actionscript/3/runtimeErrors.html
* ...
* @author umhr
*/
class Canvas extends Sprite
{
private var _targetURL:InputText;
private var _crossdomainURL:InputText;
private var _isSetCrossdomain:CheckBox;
public function Canvas()
{
init();
}
private function init():void
{
if (stage) onInit();
else addEventListener(Event.ADDED_TO_STAGE, onInit);
}
private function onInit(event:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, onInit);
// entry point
addUI();
}
private function addUI():void {
_targetURL = new InputText(this, 8, 8, "http://cnet.tumblr.com/");
_targetURL.width = 465 - 16;
_isSetCrossdomain = new CheckBox(this, 8, 30, "set crossdomain.xml", onSetCrossdomain);
_crossdomainURL = new InputText(this, 8+128, 30, "crossdomain.xml");
_crossdomainURL.width = 465 - 16 - 128;
_crossdomainURL.enabled = false;
new PushButton(this, 365-8, 60, "load", onLoad);
}
private function onSetCrossdomain(e:Event):void
{
//Log.trace("read crossdomain.xml");
_crossdomainURL.enabled = _isSetCrossdomain.selected;
// 自動補完
if (_crossdomainURL.text == "crossdomain.xml" || _crossdomainURL.text == "") {
var text:String = _targetURL.text;
if (text.lastIndexOf("/") > -1) {
text = text.substr(0, text.lastIndexOf("/"));
}
text += "/crossdomain.xml";
_crossdomainURL.text = text;
}
}
private function onLoad(e:Event):void
{
Log.clear();
loadXML(_targetURL.text);
}
private function loadXML(url:String):void
{
var urlRequest:URLRequest = new URLRequest(url);
// AS3でXML - さくさんの日記
// http://d.hatena.ne.jp/sakusan_net/20100117/1263694599
//var urlRequestHeader:URLRequestHeader = new URLRequestHeader("pragma", "no-cache");
//urlRequest.requestHeaders.push(urlRequestHeader);// クロスドメイン時2170のerrorがでる
// チェックされている場合、設定します。
if(_isSetCrossdomain.selected){
Security.loadPolicyFile(_crossdomainURL.text);
}
var urlLoader:URLLoader = new URLLoader(urlRequest);
urlLoader.addEventListener(Event.COMPLETE, urlLoader_complete);
urlLoader.addEventListener(Event.OPEN, urlLoader_open);
urlLoader.addEventListener(IOErrorEvent.IO_ERROR, urlLoader_ioError);
urlLoader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, urlLoader_securityError);
}
private function urlLoader_securityError(e:SecurityErrorEvent):void
{
Log.trace(e.type, e.errorID, e.text);
if (e.errorID == 2170) {
Log.trace("セキュリティサンドボックス侵害:%1 は HTTP ヘッダーを %2 に送信できません。");
}else if (e.errorID == 2048) {
Log.trace("crossdomain.xmlで許可されていないようです。");
Log.trace('crossdomain.xmlの読み先がマスターでは無い場合、');
Log.trace('マスターに < site-control permitted - cross - domain - policies = "all" / > を設定し忘れていませんか?');
}
}
private function urlLoader_ioError(e:IOErrorEvent):void
{
Log.trace(e.type, e.errorID, e.text);
if (e.errorID == 2032) {
Log.trace("ストリームエラー:ファイルがありません。");
}
}
private function urlLoader_open(e:Event):void
{
Log.trace(e.type, "ダウンロードが開始されました。");
}
private function urlLoader_complete(e:Event):void
{
Log.trace(e.type,"ダウンロードが完了しました。");
var urlLoader:URLLoader = e.target as URLLoader;
urlLoader.removeEventListener(Event.COMPLETE, urlLoader_complete);
var data:String = urlLoader.data;
Log.trace("長さ "+data.length+"の文字列として読み込みました。");
//Log.trace(data);
var xml:XML = XML(data);
Log.trace(xml);
//Log.trace(xml.item);
}
}
import flash.display.Sprite;
import flash.events.Event;
import flash.text.TextField;
import flash.utils.getQualifiedClassName;
/**
* traceを
* @author umhr
*/
class Log extends Sprite
{
static private var _tracer:Tracer;
static private var _textField:TextField;
static private var _date:Date;
static private var _width:int;
static private var _height:int;
public function Log(x:Number = 0, y:Number = 0, width:int = 800, height:int = 600)
{
this.x = x;
this.y = y;
_width = width;
_height = height;
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
// entry point
addChild(getTextField());
mouseEnabled = false;
}
static private function getTextField():TextField {
if (!_textField) {
_textField = new TextField();
}
_textField.textColor = 0xFF0000;
_textField.width = _width;
_textField.height = _height;
_textField.mouseEnabled = false;
return _textField;
}
static public function trace(... arguments):void {
if (!_tracer) {
_tracer = new Tracer();
}
var msg:String = _tracer.show(arguments);
if (_textField) {
_textField.appendText(msg + "\n");
}
}
static public function clear():void {
_textField.text = "";
}
static public function traceTime(... arguments):void {
if (!_tracer) {
_tracer = new Tracer();
}
if (!_date) {
_date = new Date();
}
var time:uint = new Date().time - _date.time;
var msg:String = _tracer.withTime(time, arguments);
if (_textField) {
_textField.appendText(msg + "\n");
}
}
static public function timeReset():void {
_date = null;
}
static public function dump(obj:Object, useLineFeed:Boolean = false):String {
var str:String = returnDump(obj)
if (!useLineFeed) {
str = str.replace(/\n/g, "");
}
trace(str);
return str;
}
static private function returnDump(obj:Object):String {
var str:String = _dump(obj);
if (str.length == 0) {
str = String(obj);
}else if (getQualifiedClassName(obj) == "Array") {
str = "[\n" + str.slice( 0, -2 ) + "\n]";
}else {
str = "{\n" + str.slice( 0, -2 ) + "\n}";
}
return str;
}
static private function _dump(obj:Object, indent:int = 0):String {
var result:String = "";
var da:String = (getQualifiedClassName(obj) == "Array")?'':'"';
var tab:String = "";
for ( var i:int = 0; i < indent; ++i ) {
tab += " ";
}
for (var key:String in obj) {
if (typeof obj[key] == "object") {
var type:String = getQualifiedClassName(obj[key]);
if (type == "Object" || type == "Array") {
result += tab + da + key + da + ":"+((type == "Array")?"[":"{");
var dump_str:String = _dump(obj[key], indent + 1);
if (dump_str.length > 0) {
result += "\n" + dump_str.slice(0, -2) + "\n";
result += tab;
}
result += (type == "Array")?"],\n":"},\n";
}else {
result += tab + '"' + key + '":<' + type + ">,\n";
}
}else if (typeof obj[key] == "function") {
result += tab + '"' + key + '":<Function>,\n';
}else {
var dd:String = (typeof obj[key] == "string")?"'":"";
result += tab + da + key + da + ":" + dd + obj[key] +dd + ",\n";
}
}
return result;
}
}
class Tracer {
public function Tracer() {
}
public function show(... arguments):String {
var result:String = "Log : " + arguments.join(" ");
trace(result);
return result;
}
public function withTime(time:uint, arg:Array):String {
var result:String = "Log : " + time + " : " + arg.join(" ");
trace(result);
return result;
}
}