* AUTHOR: uupaa.js@gmail.com\r
* \r
*/\r
-var X_ImgLoader_hasImage = !!window[ 'Image' ],\r
- X_ImgLoader_image = X_ImgLoader_hasImage && new Image(),\r
+var X_ImgLoader_image = window[ 'Image' ] && new Image(),\r
// IE では厳密には HTMLImageElement ではなく、appendChild してもサイズが取れず、removeChild に失敗する\r
- X_ImgLoader_isElement = !( X_UA[ 'IE' ] < 9 ) && X_Type_isHTMLElement( X_ImgLoader_image );\r
+ X_ImgLoader_isElement = !( X_UA[ 'IE' ] < 9 ) && X_Type_isHTMLElement( X_ImgLoader_image ),\r
+ // http://uupaa.hatenablog.com/entry/2013/12/17/171809\r
+ // お手軽に画像の読み込みをハンドリングする、今どきな方法\r
+ X_ImgLoader_0forError = !X_UA[ 'IE' ] || X_UA[ 'IE' ] === 11;\r
\r
/*\r
* TODO\r
X_TEMP.X_ImgLoader_params\r
);\r
\r
- X_ImgLoader[ 'listen' ]( [ 'load', 'error' /*, 'abort'*/, X_EVENT_KILL_INSTANCE ], X_ImgLoader_handleEvent );\r
+ X_ImgLoader[ 'listen' ]( [ 'load', 'error' /*, 'abort'*/ ], X_ImgLoader_handleEvent );\r
\r
delete X_TEMP.X_ImgLoader_init;\r
- delete X_TEMP.X_ImgLoader_params; \r
+ delete X_TEMP.X_ImgLoader_params;\r
\r
return X_ImgLoader;\r
};\r
\r
X_TEMP.X_ImgLoader_params = {\r
- _busy : false,\r
tick : 0,\r
timerID : 0,\r
finish : false,\r
timeout : 0,\r
\r
load : function( data ){\r
- this._busy = true;\r
this.abspath = X_URL_toAbsolutePath( data[ 'url' ] );\r
this.delay = data[ 'delay' ] || 100;\r
this.timeout = data[ 'timeout' ] || 5000;\r
// abort がある?\r
raw && raw.abort && raw.abort();\r
// this[ '_rawObject' ].src = '';\r
- this._busy = false;\r
this.finish = true;\r
},\r
\r
console.log( 'X.Net.Image:reset ' + this.abspath + ' timerID:' + this.timerID );\r
\r
this.timerID && X_Timer_remove( this.timerID );\r
+ this.timerID = 0;\r
+ \r
//X_ImgLoader_isElement ? this[ '_rawObject' ].removeAttribute( 'src' ) : ( this[ '_rawObject' ].src = '' );\r
this[ '_rawObject' ].src = '';\r
- this.timerID = 0;\r
- this._busy = false;\r
- this.finished = false;\r
- this.abspath = '';\r
+ this.finish = false;\r
+ this.abspath = '';\r
}\r
};\r
\r
var raw = this[ '_rawObject' ];\r
\r
if( this.finish ) return;\r
+ \r
if( raw && raw.complete ){\r
- this._busy = false;\r
this.finish = true;\r
console.log( 'X.Net.Image:detect ' + raw.width );\r
if( raw.width ) return;\r
this.timerID = this[ 'asyncDispatch' ]( X_EVENT_ERROR );\r
} else\r
if( this.timeout < ( this.tick += this.delay ) ){\r
- this._busy = false;\r
this.finish = true;\r
X_Timer_remove( this.timerID );\r
this.timerID = this[ 'asyncDispatch' ]( { type : X_EVENT_ERROR, 'timeout' : true } );\r
};\r
\r
function X_ImgLoader_handleEvent( e ){\r
- var size;\r
+ var raw = this[ '_rawObject' ], size;\r
\r
+ // IE11 reset() 時にここに入ってくる...\r
+ if( !this.abspath ) return;\r
console.log( 'X.Net.Image:handleEvent ' + e.type );\r
\r
switch( e.type ){\r
case 'error' :\r
//case 'abort' : // TODO ??\r
+ // ie11(10,9 開発モード)で mineType 不正の場合、画像取得に成功してもエラーイベントが起こるのを無視する。\r
+ if( X_ImgLoader_0forError && raw.width ) return;\r
if( this.finish ) return;\r
- this._busy = false;\r
this.finish = true;\r
this.timerID && X_Timer_remove( this.timerID );\r
this.timerID = this[ 'asyncDispatch' ]( /*e.type === 'error' ?*/ X_EVENT_ERROR /*: X_EVENT_CANCELED*/ );\r
case 'load' :\r
// if( finish === true ) return; // これがあると firefox3.6 で駄目、、、\r
// if( timer ) return; // これがあると safari3.2 で駄目、、、\r
- this._busy = false;\r
this.finish = true;\r
this.timerID && X_Timer_remove( this.timerID );\r
- if( X_UA[ 'Opera' ] && !this[ '_rawObject' ].complete ){\r
+ if( X_UA[ 'Opera' ] && !raw.complete ){\r
this.timerID = this[ 'asyncDispatch' ]( X_EVENT_ERROR );\r
return;\r
};\r
// time , this[ '_rawObject' ].fileSize\r
} );\r
break;\r
-\r
- case X_EVENT_KILL_INSTANCE :\r
- this.reset();\r
- break;\r
};\r
};\r
\r