OSDN Git Service

Version 0.6.205, bug fixes X.Net.Form, update X.HTMLAudio for iOS7+.
[pettanr/clientJs.git] / 0.6.x / js / 06_net / 03_XNetForm.js
index 244e5d3..66a1bac 100644 (file)
@@ -1,6 +1,8 @@
 //{+netform"<form>によるGETとPOST"(動的に生成したフォームによるGETとPOST。)[+net,+ninjaiframe]\r
 \r
-var X_FormSender_errorTimerID, X_FormSender_onloadCount = 0;\r
+var X_FormSender_errorTimerID,\r
+       X_FormSender_isLeave,\r
+       X_FormSender_onloadCount = 0;\r
 \r
 X_TEMP.X_FormSender_init = function(){\r
        X_FormSender = X_Class_override( X_NinjaIframe(), X_TEMP.X_FormSender_params );\r
@@ -13,7 +15,7 @@ X_TEMP.X_FormSender_init = function(){
 \r
 /*\r
  * form 構築時に "><script> といった文字列の挿入を禁止するために " を エスケープする\r
- * TODO 改行文字を消す\r
+ * TODO 改行文字を消す escape?\r
  */\r
 function X_FormSender_escapeQuote( str ){\r
        \r
@@ -21,28 +23,29 @@ function X_FormSender_escapeQuote( str ){
 };\r
 \r
 X_TEMP.X_FormSender_params = {\r
-       \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
+                                       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 || '_self',\r
                                html   = [\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( option[ 'url' ] || '' ), \r
                                                '" target="', X_FormSender_escapeQuote( target ),\r
                                                '">' ];\r
                                \r
-                               if( target === '_top' || target === '_parent' ) X_FormSender.isJump = true;\r
-                               if( 0 <= option[ 'timeout' ] ) X_FormSender.timeout = option[ 'timeout' ];\r
+                               X_FormSender_isLeave = target === '_top' || target === '_parent';\r
+\r
                                \r
                                for( k in params ){\r
                                        // TODO 使用すべきでない name\r
@@ -51,11 +54,15 @@ X_TEMP.X_FormSender_params = {
                                };\r
                                \r
                                html.push( '</form><script>document.forms[0].submit();</script>' );\r
-                               \r
+\r
                                X_FormSender\r
                                        [ 'refresh' ]( html.join( '' ) )\r
                                        [ 'listen' ]( [ 'ninjaload', 'ninjaerror' ], X_FormSender_iframeListener );\r
-                                                       \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
@@ -66,8 +73,9 @@ X_TEMP.X_FormSender_params = {
                        \r
                        reset : function(){\r
                                X_FormSender._busy = X_FormSender._canceled = false;\r
-                               X_FormSender[ 'unlisten' ]( [ 'ninjaload', 'ninjaerror' ], X_FormSender_iframeListener );\r
-                               X_FormSender[ 'refresh' ]( '' );\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
@@ -78,18 +86,13 @@ function X_FormSender_iframeListener( e ){
        \r
        switch( e.type ){\r
                case 'ninjaload' :\r
-                       if( X_FormSender.isJump ){\r
+                       if( X_FormSender_isLeave ){\r
                                return;\r
                        };\r
                        \r
                        if( ++X_FormSender_onloadCount === 1 ){\r
-                               X_FormSender_errorTimerID = X_FormSender[ 'asyncDispatch' ]( X_FormSender.timeout, { type : X_EVENT_ERROR, 'timeout' : true } );\r
-\r
-                               // TODO レスポンスの html にアクセスしたい場合\r
-                               // TODO samedomain or xiframe-sender\r
-                               \r
                                idoc = this[ '_rawObject' ].contentDocument || this._iwin.document,\r
-                               \r
+\r
                                X_FormSender[ 'asyncDispatch' ]( { type : X_EVENT_SUCCESS, response : idoc && idoc.body ? idoc.body.innerHTML : '' } );\r
                        };\r
                        break;\r