OSDN Git Service

Version 0.6.164, fix gadget proxy for X.XHR.
[pettanr/clientJs.git] / 0.6.x / js / 06_net / 05_XXHRGadget.js
index 8e8386c..d65f2c0 100644 (file)
@@ -28,11 +28,12 @@ var X_NET_GIMR_canUse         = 5.5 <= X_UA[ 'IE' ] || !X_UA[ 'IE' ],
        \r
        X_NET_GIMR_IMAGE_URL      = 'img/opacity0.gif',\r
        \r
-       X_NET_GIMR_detection      = new Function( 'f,j,i', 'for(j=f.length;j;)try{i=f[--j];return i.location.hash}catch(e){}' ),\r
+       // https://code.google.com/p/xssinterface/source/browse/trunk/js/xssinterface.js\r
+       X_NET_GIMR_maxQueryLength = X_UA[ 'IE' ] ? 2000 : 6000,\r
        \r
-       X_NET_GIMR_gadgetIframe,\r
+       X_NET_GIMR_detection      = new Function( 'f,j,i', 'for(j=f.length;j;)try{i=f[--j];return i.location.hash}catch(e){}' ),\r
        \r
-       X_NET_GIMR_requestOptions,\r
+       X_NET_GIMR_requestBatches,\r
        \r
        X_NET_GIMR_requestOriginal,\r
        \r
@@ -46,7 +47,7 @@ var X_NET_GIMR_canUse         = 5.5 <= X_UA[ 'IE' ] || !X_UA[ 'IE' ],
 \r
 \r
 function X_NET_GIMR_detectImageOverIframe(){\r
-       var raw = X_NET_GIMR_gadgetIframe[ '_rawObject' ],\r
+       var raw = this[ '_rawObject' ],\r
                iwin, ret, n, error, data = null, zero, e;\r
        \r
        if( raw ){\r
@@ -60,9 +61,9 @@ function X_NET_GIMR_detectImageOverIframe(){
                                //console.log( '' + ret );\r
                                \r
                                switch( X_NET_GIMR_phase ){\r
-                                       case 0 : // init\r
-                                               // TODO 分割\r
-                                               iwin.location.href = X_NET_GIMR_GADGET_URL + '#' + encodeURIComponent( X_JSON_stringify( X_NET_GIMR_requestOptions ) );\r
+                                       case 0 : // makeRequest\r
+                                               iwin.location.href = X_NET_GIMR_GADGET_URL + '#' + X_NET_GIMR_requestBatches.shift();\r
+                                               if( X_NET_GIMR_requestBatches.length ) return; //TODO boost\r
                                                break;\r
                                                \r
                                        case 1 : // after makeRequest > :ok 待ち\r
@@ -87,7 +88,7 @@ function X_NET_GIMR_detectImageOverIframe(){
                                                        X_NET_GIMR_isReceiveBatches = --n;\r
                                                        iwin.location.href = X_NET_GIMR_GADGET_URL + '#_recived_' + X_NET_GIMR_isReceiveBatches;\r
                                                        // speedup\r
-                                                       X_NET_GIMR_timerID = X_Timer_add( 16, 0, X_NET_GIMR_detectImageOverIframe );\r
+                                                       X_NET_GIMR_timerID = X_Timer_add( 16, 0, this, X_NET_GIMR_detectImageOverIframe );\r
                                                        return X_Callback_UN_LISTEN;\r
                                                } else {\r
                                                        X_NET_GIMR_receivedString = X_Net_GIMR_decodeLocationHash( ret );\r
@@ -126,7 +127,7 @@ function X_NET_GIMR_detectImageOverIframe(){
                                                \r
                                                e[ 'headers' ] = ret[ 'headers' ];\r
                                                \r
-                                               X_NET_GIMRWrapper[ 'asyncDispatch' ]( e);\r
+                                               X_NET_GIMRWrapper[ 'asyncDispatch' ]( e );\r
                                                \r
                                                //console.dir( e );\r
 \r
@@ -148,15 +149,32 @@ function X_Net_GIMR_decodeLocationHash( str ){
 };\r
 \r
 X_TEMP.X_Net_GIMR_init = function(){\r
-       // TODO extend NinjaIframe\r
        X_NET_GIMRWrapper = X_Class_override(\r
-                       X_EventDispatcher(),\r
-                       X_TEMP.X_Net_GIMR_props\r
-               );\r
+                       X_Node_systemNode\r
+                               .create( 'iframe', {\r
+                                       className         : 'hidden-iframe',\r
+                                       name              : X_NET_GIMR_iframeName,\r
+                                       id                : X_NET_GIMR_iframeName,\r
+                                       src               : X_NET_GIMR_GADGET_URL + '#' + encodeURIComponent(\r
+                                                       X_JSON_stringify( {\r
+                                                               'img'  : X_URL_toAbsolutePath( X_NET_GIMR_IMAGE_URL ),\r
+                                                               'len'  : X_NET_GIMR_maxQueryLength,\r
+                                                               'itvl' : 333,\r
+                                                               'gck'  : X_UA[ 'Gecko' ] ? 1 : 0\r
+                                                       } )\r
+                                               ),\r
+                                       scrolling         : 'no',\r
+                                       allowtransparency : 'no',                                       \r
+                                       frameborder       : 0,\r
+                                       tabindex          : -1\r
+                                       }),\r
+                       X_TEMP.X_Net_GIMR_props );\r
        \r
        delete X_TEMP.X_Net_GIMR_init;\r
        delete X_TEMP.X_Net_GIMR_props; \r
        \r
+       X_NET_GIMR_requestBatches = [];\r
+       \r
        return X_NET_GIMRWrapper;\r
 };\r
 \r
@@ -167,77 +185,50 @@ X_TEMP.X_Net_GIMR_props = {
                _onloadCount  : 0,\r
                \r
                load : function( obj ){\r
-                       var k, v;\r
+                       var req = {},\r
+                               k, max, sendStr, l, str;\r
                        //createURL\r
-                       if( !X_NET_GIMR_gadgetIframe ){\r
-                               X_NET_GIMR_gadgetIframe = X_Node_systemNode\r
-                                               .create( 'iframe', {\r
-                                                       className         : 'hidden-iframe',\r
-                                                       name              : X_NET_GIMR_iframeName,\r
-                                                       id                : X_NET_GIMR_iframeName,\r
-                                                       src               : X_NET_GIMR_GADGET_URL + '#' + encodeURIComponent(\r
-                                                                       X_JSON_stringify( {\r
-                                                                               'img'  : X_URL_toAbsolutePath( X_NET_GIMR_IMAGE_URL ),\r
-                                                                               // https://code.google.com/p/xssinterface/source/browse/trunk/js/xssinterface.js\r
-                                                                               'len'  : X_UA[ 'IE' ] ? 2000 : 6000,\r
-                                                                               'itvl' : 333\r
-                                                                       } )\r
-                                                               ),\r
-                                                       scrolling         : 'no',\r
-                                                       allowtransparency : 'no',                                       \r
-                                                       frameborder       : 0,\r
-                                                       tabindex          : -1\r
-                                                       } );\r
+\r
+                       X_NET_GIMR_requestOriginal = obj;\r
+                       \r
+                       for( k in obj ){\r
+                               switch( k ){\r
+                                       case 'url' :\r
+                                       case 'postdata' :\r
+                                       case 'method' :\r
+                                       case 'dataType' :\r
+                                       case 'headers' :\r
+                                       case 'cashe' :\r
+                                               req[ k ] = obj[ k ];\r
+                                               break;\r
+                               };\r
                        };\r
                        \r
-                       X_NET_GIMR_timerID = X_Timer_add( 333, 0, X_NET_GIMR_detectImageOverIframe );\r
+                       max = X_NET_GIMR_maxQueryLength - X_NET_GIMR_GADGET_URL.length - 5;\r
                        \r
-                       X_NET_GIMR_requestOriginal = X_Object_deepCopy( obj );\r
-       \r
-                       //console.dir( obj );\r
+                       sendStr = X_JSON_stringify( req );\r
                        \r
-                       X_NET_GIMR_requestOptions = {\r
-                               'CONTENT_TYPE'     : 'TEXT',\r
-                               'GET_FULL_HEADERS' : true,\r
-                               'REFRESH_INTERVAL' : 0,\r
-                               'url'              : obj[ 'url' ]\r
+                       while( sendStr.length ){\r
+                               l   = max;\r
+                               str = encodeURIComponent( sendStr.substr( 0, l ) );\r
+                               while( max < str.length ){\r
+                                       l   = l * ( 2 + l / str.length ) / 3 | 0;\r
+                                       str = encodeURIComponent( sendStr.substr( 0, l ) );\r
+                                       //console.log( l );\r
+                               };\r
+                               X_NET_GIMR_requestBatches.push( str );\r
+                               sendStr = sendStr.substr( l );\r
+                               str = '';\r
                        };\r
                        \r
-                       for( k in obj ){\r
-                               if( v = '' + obj[ k ] ){\r
-                                       switch( k ){\r
-                                               case 'postdata' :\r
-                                                       X_NET_GIMR_requestOptions[ 'POST_DATA' ] = v;\r
-                                                       break;\r
-                                               case 'method' :\r
-                                                       X_NET_GIMR_requestOptions[ 'METHOD' ] = v;\r
-                                                       break;                                  \r
-                                               case 'dataType' :\r
-                                                       // TEXT 以外は無視される?\r
-                                                       switch( v = v.toUpperCase() ){\r
-                                                               case 'TEXT' :\r
-                                                               case 'JSON' :\r
-                                                                       X_NET_GIMR_requestOptions[ 'CONTENT_TYPE' ] = v;\r
-                                                                       break;\r
-                                                               case 'DOM'  :\r
-                                                               case 'HTML' :\r
-                                                               case 'HTM'  :\r
-                                                               case 'XML'  :\r
-                                                                       X_NET_GIMR_requestOptions[ 'CONTENT_TYPE' ] = 'DOM';\r
-                                                                       break;\r
-                                                               //case 'FEED' :\r
-                                                       };              \r
-                                                       break;\r
-                                               case 'headers' :\r
-                                                       X_NET_GIMR_requestOptions[ 'HEADERS' ] = X_NET_GIMR_requestOriginal[ k ];\r
-                                                       break;\r
-                                               case 'cashe' :\r
-                                                       X_NET_GIMR_requestOptions[ 'REFRESH_INTERVAL' ] = 3600;\r
-                                                       break;\r
-                                       };                                      \r
-                               };\r
+                       sendStr = '';\r
+                       \r
+                       if( 1 < X_NET_GIMR_requestBatches.length ){\r
+                               X_NET_GIMR_requestBatches[ 0 ] = X_NET_GIMR_requestBatches.length + ':' + X_NET_GIMR_requestBatches[ 0 ];       \r
                        };\r
                        \r
+                       X_NET_GIMR_timerID = X_Timer_add( 333, 0, this, X_NET_GIMR_detectImageOverIframe );\r
+                       \r
                        this._busy = true;\r
                },\r
                \r