-X[ 'Net' ][ 'Form' ] = {\r
- // 隠し iframe 使用の可否\r
-};\r
+//{+netform"<form>によるGETとPOST"(動的に生成したフォームによるGETとPOST。)[+net,+ninjaiframe]\r
\r
-var X_NET_Form_errorTimerID, X_Net_Form_onloadCount = 0;\r
+var X_FormSender_errorTimerID,\r
+ X_FormSender_isLeave, X_FormSender_isSameDomain,\r
+ X_FormSender_onloadCount = 0;\r
\r
-X_TEMP.X_NET_Form_init = function(){\r
- X_NET_FormWrapper = X_Class_override( X[ 'Util' ][ 'NinjaIframe' ](), X_TEMP.X_NET_Form_params );\r
+X_TEMP.X_FormSender_init = function(){\r
+ X_FormSender = X_Class_override( X_NinjaIframe(), X_TEMP.X_FormSender_params );\r
\r
- delete X_TEMP.X_NET_Form_init;\r
- delete X_TEMP.X_NET_Form_params;\r
+ delete X_TEMP.X_FormSender_init;\r
+ delete X_TEMP.X_FormSender_params;\r
\r
- return X_NET_FormWrapper;\r
+ return X_FormSender;\r
};\r
\r
/*\r
- * form 構築時に "><script> といった文字列の挿入を禁止するために " を エスケープする、併せて改行文字を消す\r
+ * form 構築時に "><script> といった文字列の挿入を禁止するために " を エスケープする\r
+ * TODO 改行文字を消す escape?\r
*/\r
-function X_NET_Form_escapeQuote( str ){\r
+function X_FormSender_escapeQuote( str ){\r
+ \r
return X_String_toChrReferance( str );\r
};\r
\r
-X_TEMP.X_NET_Form_params = {\r
- \r
+X_TEMP.X_FormSender_params = {\r
+\r
_busy : false,\r
_canceled : false,\r
\r
- timeout : 1000,\r
- isJump : false, // ページを離脱するか?\r
- \r
load : function( option ){\r
//createURL\r
- var params = option[ 'params' ] || {},\r
- target = option[ 'target' ],\r
+ var params = option[ 'params' ] || {},\r
+ url = option[ 'url' ],\r
+ target = option[ 'target' ],\r
+ timeout = option[ 'timeout' ],\r
+ // http://search.web-sun.com/zatu/charset.html\r
+ // charset = option[ 'charset' ],\r
html, k;\r
\r
- target = target === '_self' ? '_parent' : target === '_blank' ? '_self' : target,\r
+ target = target === '_self' ? '_parent' : target === '_blank' ? '_self' : target || '_self',\r
html = [\r
- '<form method="', X_NET_Form_escapeQuote( option[ 'method' ] || 'GET' ), \r
- '" action="', X_NET_Form_escapeQuote( option[ 'url' ] || '' ), \r
- '" target="', X_NET_Form_escapeQuote( target || '_self' ),\r
- '">' ],\r
- k;\r
+ // <meta http-equiv="Content-Type" content="text/html; charset=euc-jp">\r
+ '<form method="', X_FormSender_escapeQuote( option[ 'method' ] || 'GET' ), \r
+ '" action="', X_FormSender_escapeQuote( url || '' ), \r
+ '" target="', X_FormSender_escapeQuote( target ),\r
+ '">' ];\r
\r
- if( target === '_top' || target === '_parent' ) this.isJump = true;\r
- if( 0 <= option[ 'timeout' ] ) this.timeout = option[ 'timeout' ];\r
+ X_FormSender_isLeave = target === '_top' || target === '_parent';\r
+ X_FormSender_isSameDomain = X_URL_isSameDomain( url );\r
\r
for( k in params ){\r
// TODO 使用すべきでない name\r
- html.push( '<input type="hidden" name="', X_NET_Form_escapeQuote( k ), '" value="', X_NET_Form_escapeQuote( params[ k ] || '' ), '">' );\r
+ html.push( '<input type="hidden" name="', X_FormSender_escapeQuote( k ), '" value="', X_FormSender_escapeQuote( params[ k ] || '' ), '">' );\r
+ // TODO 改行を含む text には textarea\r
};\r
\r
html.push( '</form><script>document.forms[0].submit();</script>' );\r
- \r
- X_NET_FormWrapper\r
+\r
+ X_FormSender\r
[ 'refresh' ]( html.join( '' ) )\r
- [ 'listen' ]( [ 'ninjaload', 'ninjaerror' ], X_NET_Form_iframeListener );\r
- \r
- X_NET_FormWrapper._busy = true;\r
+ [ 'listen' ]( [ 'ninjaload', 'ninjaerror' ], X_FormSender_iframeListener );\r
+ \r
+ if( 0 < timeout ){\r
+ X_FormSender_errorTimerID = X_FormSender[ 'asyncDispatch' ]( timeout, { type : X_EVENT_ERROR, 'timeout' : true } );\r
+ };\r
+ \r
+ X_FormSender._busy = true;\r
},\r
\r
cancel : function(){\r
- X_NET_FormWrapper.reset();\r
- X_NET_FormWrapper._canceled = true;\r
+ X_FormSender.reset();\r
+ X_FormSender._canceled = true;\r
},\r
\r
reset : function(){\r
- X_NET_FormWrapper._busy = X_NET_FormWrapper._canceled = false;\r
- X_NET_FormWrapper[ 'unlisten' ]( [ 'ninjaload', 'ninjaerror' ], X_NET_Form_iframeListener );\r
- X_NET_FormWrapper[ 'refresh' ]( '' );\r
- X_NET_Form_errorTimerID && X_Timer_remove( X_NET_Form_errorTimerID );\r
- X_NET_Form_errorTimerID = X_Net_Form_onloadCount = 0;\r
+ X_FormSender._busy = X_FormSender._canceled = false;\r
+ X_FormSender\r
+ [ 'unlisten' ]( [ 'ninjaload', 'ninjaerror' ], X_FormSender_iframeListener )\r
+ [ 'refresh' ]( '' );\r
+ X_FormSender_errorTimerID && X_Timer_remove( X_FormSender_errorTimerID );\r
+ X_FormSender_errorTimerID = X_FormSender_onloadCount = 0;\r
}\r
};\r
\r
-function X_NET_Form_iframeListener( e ){\r
+function X_FormSender_iframeListener( e ){\r
var idoc;\r
\r
switch( e.type ){\r
case 'ninjaload' :\r
- if( this.isJump ){\r
+ if( X_FormSender_isLeave ){\r
return;\r
};\r
\r
- if( ++X_Net_Form_onloadCount === 1 ){\r
- X_NET_Form_errorTimerID = X_NET_FormWrapper[ 'asyncDispatch' ]( this.timeout, X_EVENT_ERROR );\r
-\r
- // TODO レスポンスの html にアクセスしたい場合\r
- // TODO samedomain or xiframe-sender\r
- \r
- idoc = this[ '_rawObject' ].contentDocument || this._iwin.document,\r
- \r
- X_NET_FormWrapper[ 'asyncDispatch' ]( { type : X_EVENT_SUCCESS, responce : idoc && idoc.body ? idoc.body.innerHTML : '' } );\r
+ if( ++X_FormSender_onloadCount === 1 ){\r
+ if( X_FormSender_isSameDomain ){\r
+ idoc = this[ '_rawObject' ].contentDocument || this._iwin.document;\r
+ X_FormSender[ 'asyncDispatch' ]( { type : X_EVENT_SUCCESS, response : idoc && idoc.body ? idoc.body.innerHTML : '' } ); \r
+ } else {\r
+ X_FormSender[ 'asyncDispatch' ]( { type : X_EVENT_SUCCESS } );\r
+ };\r
};\r
break;\r
case 'ninjaerror' :\r
console.log( 'iframe onerror' );\r
- X_NET_FormWrapper[ 'asyncDispatch' ]( X_EVENT_ERROR );\r
+ X_FormSender[ 'asyncDispatch' ]( X_EVENT_ERROR );\r
break;\r
};\r
- return X_Callback_UN_LISTEN;\r
+ return X_CALLBACK_UN_LISTEN;\r
};\r
+\r
+//}+netform
\ No newline at end of file