1 //{+netform"<form>によるGETとPOST"(動的に生成したフォームによるGETとPOST。)[+net,+ninjaiframe]
\r
3 X[ 'Net' ][ 'Form' ] = {
\r
7 var X_NET_Form_errorTimerID, X_Net_Form_onloadCount = 0;
\r
9 X_TEMP.X_NET_Form_init = function(){
\r
10 X_NET_FormWrapper = X_Class_override( X[ 'Util' ][ 'NinjaIframe' ](), X_TEMP.X_NET_Form_params );
\r
12 delete X_TEMP.X_NET_Form_init;
\r
13 delete X_TEMP.X_NET_Form_params;
\r
15 return X_NET_FormWrapper;
\r
19 * form 構築時に "><script> といった文字列の挿入を禁止するために " を エスケープする、併せて改行文字を消す
\r
21 function X_NET_Form_escapeQuote( str ){
\r
22 return X_String_toChrReferance( str );
\r
25 X_TEMP.X_NET_Form_params = {
\r
31 isJump : false, // ページを離脱するか?
\r
33 load : function( option ){
\r
35 var params = option[ 'params' ] || {},
\r
36 target = option[ 'target' ],
\r
39 target = target === '_self' ? '_parent' : target === '_blank' ? '_self' : target,
\r
41 '<form method="', X_NET_Form_escapeQuote( option[ 'method' ] || 'GET' ),
\r
42 '" action="', X_NET_Form_escapeQuote( option[ 'url' ] || '' ),
\r
43 '" target="', X_NET_Form_escapeQuote( target || '_self' ),
\r
47 if( target === '_top' || target === '_parent' ) this.isJump = true;
\r
48 if( 0 <= option[ 'timeout' ] ) this.timeout = option[ 'timeout' ];
\r
51 // TODO 使用すべきでない name
\r
52 html.push( '<input type="hidden" name="', X_NET_Form_escapeQuote( k ), '" value="', X_NET_Form_escapeQuote( params[ k ] || '' ), '">' );
\r
55 html.push( '</form><script>document.forms[0].submit();</script>' );
\r
58 [ 'refresh' ]( html.join( '' ) )
\r
59 [ 'listen' ]( [ 'ninjaload', 'ninjaerror' ], X_NET_Form_iframeListener );
\r
61 X_NET_FormWrapper._busy = true;
\r
64 cancel : function(){
\r
65 X_NET_FormWrapper.reset();
\r
66 X_NET_FormWrapper._canceled = true;
\r
70 X_NET_FormWrapper._busy = X_NET_FormWrapper._canceled = false;
\r
71 X_NET_FormWrapper[ 'unlisten' ]( [ 'ninjaload', 'ninjaerror' ], X_NET_Form_iframeListener );
\r
72 X_NET_FormWrapper[ 'refresh' ]( '' );
\r
73 X_NET_Form_errorTimerID && X_Timer_remove( X_NET_Form_errorTimerID );
\r
74 X_NET_Form_errorTimerID = X_Net_Form_onloadCount = 0;
\r
78 function X_NET_Form_iframeListener( e ){
\r
87 if( ++X_Net_Form_onloadCount === 1 ){
\r
88 X_NET_Form_errorTimerID = X_NET_FormWrapper[ 'asyncDispatch' ]( this.timeout, X_EVENT_ERROR );
\r
90 // TODO レスポンスの html にアクセスしたい場合
\r
91 // TODO samedomain or xiframe-sender
\r
93 idoc = this[ '_rawObject' ].contentDocument || this._iwin.document,
\r
95 X_NET_FormWrapper[ 'asyncDispatch' ]( { type : X_EVENT_SUCCESS, response : idoc && idoc.body ? idoc.body.innerHTML : '' } );
\r
99 console.log( 'iframe onerror' );
\r
100 X_NET_FormWrapper[ 'asyncDispatch' ]( X_EVENT_ERROR );
\r
103 return X_Callback_UN_LISTEN;
\r