'X.Window',\r
\r
/** @lends X.Util.Window.prototype */\r
- {\r
- \r
- // TODO pair 側に\r
- /**\r
- * closed の監視用タイマーID\r
- * @private\r
- * @type {number} */\r
- _timerID : 0,\r
- \r
+ { \r
'Constructor' : function( options ){\r
var url = options[ 'url' ],\r
page = window.open( url || ''/* 'about:blank' */, options[ 'name' ] || '', options[ 'params' ] || '' ),\r
html = options[ 'html' ],\r
doc = X_Script_try( X_Object_find, [ page, 'document' ] );\r
- \r
- X_Pair_create( this, page );\r
- \r
+\r
if( !url && html ){\r
this[ 'write' ]( html );\r
};\r
X_ViewPort[ 'listenOnce' ]( X_EVENT_UNLOAD, this, X_Util_Window_handleEvent );\r
this[ 'listenOnce' ]( [ X_EVENT_UNLOAD, X_EVENT_KILL_INSTANCE ], X_Util_Window_handleEvent );\r
\r
- this._timerID = X_Timer_add( options[ 'interval' ] || 500, 0, this, X_Util_Window_onTimer );\r
+ X_Pair_create( this, {\r
+ page : page,\r
+ timerID : X_Timer_add( options[ 'interval' ] || 500, 0, this, X_Util_Window_onTimer )\r
+ } );\r
},\r
\r
/**\r
* @return {boolean}\r
*/\r
'closed' : function(){\r
- return X_Script_try( X_Object_find, [ X_Pair_get( this ), 'closed' ] );\r
+ var pair = X_Pair_get( this );\r
+ \r
+ return pair ? X_Script_try( X_Object_find, [ pair.page, 'closed' ] ) : true;\r
},\r
- \r
+\r
+ /**\r
+ * 別窓の url を書き換える\r
+ * @param {string} url\r
+ * @return {Window} チェーンメソッド\r
+ */\r
+ 'url' : function( url ){\r
+ var pair = X_Pair_get( this );\r
+ \r
+ pair && ( pair.location.href = url );\r
+ },\r
+\r
/**\r
* 別窓の内容を書き換える\r
* @param {string=} opt_html html文字列\r
* @return {Window} チェーンメソッド\r
*/\r
'write' : function( opt_html ){\r
- var doc = X_Script_try( X_Object_find, [ X_Pair_get( this ), 'document' ] );\r
+ var pair = X_Pair_get( this ),\r
+ doc = pair && X_Script_try( X_Object_find, [ pair.page, 'document' ] );\r
\r
if( doc ){\r
doc.open();\r
};\r
\r
return this;\r
+ },\r
+\r
+ /**\r
+ * 別窓の値にアクセスする, X.Object.find 参照\r
+ * @param {string} selector 'navigator>mineTypes>hoge'\r
+ * @return {*}\r
+ */\r
+ 'find' : function( selector ){\r
+ var pair = X_Pair_get( this );\r
+ \r
+ if( pair ) return X_Script_try( X_Object_find, [ pair.page, selector ] );\r
}\r
- \r
- // TODO url\r
- \r
}\r
);\r
\r
function X_Util_Window_onTimer( e ){\r
+ var pair = X_Pair_get( this );\r
+\r
if( this[ 'closed' ]() ){\r
this[ 'asyncDispatch' ]( X_EVENT_UNLOAD );\r
- delete this._timerID;\r
+ delete pair.timerID;\r
return X_CALLBACK_UN_LISTEN;\r
};\r
};\r
\r
function X_Util_Window_handleEvent( e ){\r
- var page = X_Pair_get( this );\r
+ var pair = X_Pair_get( this ),\r
+ page = pair && pair.page;\r
\r
switch( e.type ){\r
case X_EVENT_UNLOAD :\r
};\r
X_Pair_release( this, page ); \r
};\r
- this._timerID && X_Timer_remove( this._timerID );\r
+ pair.timerID && X_Timer_remove( pair.timerID );\r
X_ViewPort[ 'unlisten' ]( X_EVENT_UNLOAD, this, X_Util_Window_handleEvent );\r
break;\r
};\r