*/\r
\r
// TODO Node.inherits\r
-X[ 'Util' ][ 'NinjaIframe' ] = X_EventDispatcher[ 'inherits' ](\r
+X[ 'Util' ][ 'NinjaIframe' ] = Node[ 'inherits' ](\r
'NinjaIframe',\r
{\r
autoRefresh : 0,\r
\r
- xnodeIframe : null,\r
- \r
_iwin : null,\r
\r
_contentHTML : '',\r
this._name = 'hidden-iframe-' + X_Timer_now();\r
// https://github.com/polygonplanet/Pot.js/blob/master/src/Worker.js\r
\r
- this.xnodeIframe = X_Node_body[ 'create' ](\r
- 'iframe',\r
+ X_Node_newByTag = true;\r
+\r
+ this[ 'Super' ](\r
+ 'IFRAME',\r
{\r
className : 'hidden-iframe',\r
scrolling : 'no',\r
}\r
);\r
\r
- X_ViewPort[ 'listenOnce' ]( X_EVENT_AFTER_UPDATE, this );\r
- \r
// http://nanto.asablo.jp/blog/2011/12/08/6237308\r
// IE 6/7 で文書間通信を実現するための一案\r
if( X_UA[ 'IE' ] < 9 ){\r
- this.xnodeIframe[ 'attr' ]( 'src', 'about:blank' );\r
+ this[ 'attr' ]( 'src', 'about:blank' );\r
};\r
// Safari 2.0.* bug: iframe's absolute position and src set.\r
if( !X_UA[ 'Webkit' ] ){\r
- this.xnodeIframe[ 'css' ]( { position : 'absolute' } );\r
+ this[ 'css' ]( { position : 'absolute' } );\r
};\r
\r
- if( html ) this._contentHTML = html;\r
- },\r
- \r
- 'handleEvent' : function( e ){\r
- var raw = this.xnodeIframe[ '_rawObject' ];\r
+ if( html ) this._contentHTML = html; \r
\r
- switch( e.type ){\r
- case X_EVENT_AFTER_UPDATE :\r
- this._iwin = raw.contentWindow || ( raw.contentDocument && raw.contentDocument.parentWindow ) || window.frames[ this._name ];\r
- // http://d.hatena.ne.jp/NeoCat/20080921/1221940658\r
- // こちらに名前をsetしないとtargetが動作しない\r
- if( X_UA[ 'IE' ] ) this._iwin.name = this._name;\r
- \r
- this.xnodeIframe[ 'listen' ]( [ X_UA[ 'IE' ] < 9 ? 'readystatechange' : 'load', 'error' ], this );\r
- \r
- if( !( X_UA[ 'IE' ] < 9 ) ){\r
- this._contentHTML && X_Util_NinjaIframe_writeToIframe( this );\r
- this._ready = true;\r
- return;\r
- };\r
- //break; これあると IE8 で駄目!\r
- \r
- case 'readystatechange' :\r
- if( ( raw.readyState !== 'complete' && raw.readyState !== 'loaded' ) ) break;\r
- // ie9-\r
- if( !this._ready ){\r
- this._contentHTML && X_Util_NinjaIframe_writeToIframe( this );\r
- this._ready = true;\r
- break;\r
- };\r
- // onload\r
- case 'load' :\r
- console.log( 'iframe load.' );\r
- this[ 'asyncDispatch' ]( X_EVENT_SUCCESS );\r
- break;\r
-\r
- case 'error' :\r
- this[ 'asyncDispatch' ]( X_EVENT_ERROR );\r
- break;\r
- };\r
+ this[ 'appendTo' ]( X_Node_body /* X_Node_systemNode */ );\r
\r
- return X_Callback_STOP_PROPAGATION; \r
+ X_ViewPort[ 'listenOnce' ]( X_EVENT_AFTER_UPDATE, this, X_Util_NinjaIframe_handleEvent );\r
},\r
\r
'refresh' : function( opt_contentHTML ){\r
- var raw = this.xnodeIframe[ '_rawObject' ],\r
+ var raw = this[ '_rawObject' ],\r
idoc;\r
\r
this._ready = false;\r
},\r
\r
'close' : function(){\r
- X_ViewPort[ 'unlisten' ]( X_EVENT_AFTER_UPDATE, this );\r
- this.xnodeIframe.call( 'close' );\r
- this.xnodeIframe.destroy();\r
+ X_ViewPort[ 'unlisten' ]( X_EVENT_AFTER_UPDATE, this, X_Util_NinjaIframe_handleEvent );\r
+ this.call( 'close' );\r
+ this[ 'kill' ]();\r
}\r
\r
}\r
);\r
\r
+\r
+function X_Util_NinjaIframe_handleEvent( e ){\r
+ var raw = this[ '_rawObject' ];\r
+ \r
+ switch( e.type ){\r
+ case X_EVENT_AFTER_UPDATE :\r
+ this._iwin = raw.contentWindow || ( raw.contentDocument && raw.contentDocument.parentWindow ) || window.frames[ this._name ];\r
+ // http://d.hatena.ne.jp/NeoCat/20080921/1221940658\r
+ // こちらに名前をsetしないとtargetが動作しない\r
+ if( X_UA[ 'IE' ] ) this._iwin.name = this._name;\r
+ \r
+ this[ 'listen' ]( [ X_UA[ 'IE' ] < 9 ? 'readystatechange' : 'load', 'error' ], this, X_Util_NinjaIframe_handleEvent );\r
+ \r
+ if( !( X_UA[ 'IE' ] < 9 ) ){\r
+ this._contentHTML && X_Util_NinjaIframe_writeToIframe( this );\r
+ this._ready = true;\r
+ return;\r
+ };\r
+ //break; これあると IE8 で駄目!\r
+ \r
+ case 'readystatechange' :\r
+ if( ( raw.readyState !== 'complete' && raw.readyState !== 'loaded' ) ) break;\r
+ // ie9-\r
+ if( !this._ready ){\r
+ this._contentHTML && X_Util_NinjaIframe_writeToIframe( this );\r
+ this._ready = true;\r
+ break;\r
+ };\r
+ // onload\r
+ case 'load' :\r
+ console.log( 'iframe load.' );\r
+ this[ 'asyncDispatch' ]( X_EVENT_SUCCESS );\r
+ break;\r
+\r
+ case 'error' :\r
+ this[ 'asyncDispatch' ]( X_EVENT_ERROR );\r
+ break;\r
+ };\r
+ \r
+ return X_Callback_STOP_PROPAGATION;\r
+};\r
+\r
function X_Util_NinjaIframe_writeToIframe( that ){\r
- var raw = that.xnodeIframe[ '_rawObject' ],\r
+ var raw = that[ '_rawObject' ],\r
idoc = raw.contentDocument || that._iwin.document,\r
html = that._contentHTML;\r
\r