リビジョン | 61e9c5db117630b7c51fb9d7d43eebe8a71b7666 (tree) |
---|---|
日時 | 2015-06-20 19:13:44 |
作者 | itozyun <itozyun@user...> |
コミッター | itozyun |
Version 0.6.164, fix gadget proxy for X.XHR.
@@ -35,7 +35,7 @@ function X_Util_Image_getActualDimension( XnodeOrImageElemOrSrc ){ | ||
35 | 35 | img = X_UA_DOM.IE4 ? X_Node__ie4getRawNode( xnode ) : xnode[ '_rawObject' ]; |
36 | 36 | remove = true; |
37 | 37 | } else { |
38 | - if( XnodeOrImageElemOrSrc.constructor === X.Node ){ | |
38 | + if( XnodeOrImageElemOrSrc.constructor === Node ){ | |
39 | 39 | xnode = XnodeOrImageElemOrSrc; |
40 | 40 | img = X_UA_DOM.IE4 ? X_Node__ie4getRawNode( xnode )[ '_rawObject' ] : xnode[ '_rawObject' ]; |
41 | 41 | } else |
@@ -238,6 +238,7 @@ function X_NET_proxyDispatch( e ){ | ||
238 | 238 | if( X_NET_completePhase === 1 ) |
239 | 239 | this[ 'unlisten' ]( X_EVENT_COMPLETE, X_NET_proxyDispatch ) |
240 | 240 | [ 'dispatch' ]( X_EVENT_COMPLETE ); |
241 | + this.kill();//test | |
241 | 242 | X_NET_shiftQueue(); |
242 | 243 | X_Pair_release( this ); |
243 | 244 | X_NET_completePhase = 0; |
@@ -28,11 +28,12 @@ var X_NET_GIMR_canUse = 5.5 <= X_UA[ 'IE' ] || !X_UA[ 'IE' ], | ||
28 | 28 | |
29 | 29 | X_NET_GIMR_IMAGE_URL = 'img/opacity0.gif', |
30 | 30 | |
31 | - X_NET_GIMR_detection = new Function( 'f,j,i', 'for(j=f.length;j;)try{i=f[--j];return i.location.hash}catch(e){}' ), | |
31 | + // https://code.google.com/p/xssinterface/source/browse/trunk/js/xssinterface.js | |
32 | + X_NET_GIMR_maxQueryLength = X_UA[ 'IE' ] ? 2000 : 6000, | |
32 | 33 | |
33 | - X_NET_GIMR_gadgetIframe, | |
34 | + X_NET_GIMR_detection = new Function( 'f,j,i', 'for(j=f.length;j;)try{i=f[--j];return i.location.hash}catch(e){}' ), | |
34 | 35 | |
35 | - X_NET_GIMR_requestOptions, | |
36 | + X_NET_GIMR_requestBatches, | |
36 | 37 | |
37 | 38 | X_NET_GIMR_requestOriginal, |
38 | 39 |
@@ -46,7 +47,7 @@ var X_NET_GIMR_canUse = 5.5 <= X_UA[ 'IE' ] || !X_UA[ 'IE' ], | ||
46 | 47 | |
47 | 48 | |
48 | 49 | function X_NET_GIMR_detectImageOverIframe(){ |
49 | - var raw = X_NET_GIMR_gadgetIframe[ '_rawObject' ], | |
50 | + var raw = this[ '_rawObject' ], | |
50 | 51 | iwin, ret, n, error, data = null, zero, e; |
51 | 52 | |
52 | 53 | if( raw ){ |
@@ -60,9 +61,9 @@ function X_NET_GIMR_detectImageOverIframe(){ | ||
60 | 61 | //console.log( '' + ret ); |
61 | 62 | |
62 | 63 | switch( X_NET_GIMR_phase ){ |
63 | - case 0 : // init | |
64 | - // TODO 分割 | |
65 | - iwin.location.href = X_NET_GIMR_GADGET_URL + '#' + encodeURIComponent( X_JSON_stringify( X_NET_GIMR_requestOptions ) ); | |
64 | + case 0 : // makeRequest | |
65 | + iwin.location.href = X_NET_GIMR_GADGET_URL + '#' + X_NET_GIMR_requestBatches.shift(); | |
66 | + if( X_NET_GIMR_requestBatches.length ) return; //TODO boost | |
66 | 67 | break; |
67 | 68 | |
68 | 69 | case 1 : // after makeRequest > :ok 待ち |
@@ -87,7 +88,7 @@ function X_NET_GIMR_detectImageOverIframe(){ | ||
87 | 88 | X_NET_GIMR_isReceiveBatches = --n; |
88 | 89 | iwin.location.href = X_NET_GIMR_GADGET_URL + '#_recived_' + X_NET_GIMR_isReceiveBatches; |
89 | 90 | // speedup |
90 | - X_NET_GIMR_timerID = X_Timer_add( 16, 0, X_NET_GIMR_detectImageOverIframe ); | |
91 | + X_NET_GIMR_timerID = X_Timer_add( 16, 0, this, X_NET_GIMR_detectImageOverIframe ); | |
91 | 92 | return X_Callback_UN_LISTEN; |
92 | 93 | } else { |
93 | 94 | X_NET_GIMR_receivedString = X_Net_GIMR_decodeLocationHash( ret ); |
@@ -126,7 +127,7 @@ function X_NET_GIMR_detectImageOverIframe(){ | ||
126 | 127 | |
127 | 128 | e[ 'headers' ] = ret[ 'headers' ]; |
128 | 129 | |
129 | - X_NET_GIMRWrapper[ 'asyncDispatch' ]( e); | |
130 | + X_NET_GIMRWrapper[ 'asyncDispatch' ]( e ); | |
130 | 131 | |
131 | 132 | //console.dir( e ); |
132 | 133 |
@@ -148,15 +149,32 @@ function X_Net_GIMR_decodeLocationHash( str ){ | ||
148 | 149 | }; |
149 | 150 | |
150 | 151 | X_TEMP.X_Net_GIMR_init = function(){ |
151 | - // TODO extend NinjaIframe | |
152 | 152 | X_NET_GIMRWrapper = X_Class_override( |
153 | - X_EventDispatcher(), | |
154 | - X_TEMP.X_Net_GIMR_props | |
155 | - ); | |
153 | + X_Node_systemNode | |
154 | + .create( 'iframe', { | |
155 | + className : 'hidden-iframe', | |
156 | + name : X_NET_GIMR_iframeName, | |
157 | + id : X_NET_GIMR_iframeName, | |
158 | + src : X_NET_GIMR_GADGET_URL + '#' + encodeURIComponent( | |
159 | + X_JSON_stringify( { | |
160 | + 'img' : X_URL_toAbsolutePath( X_NET_GIMR_IMAGE_URL ), | |
161 | + 'len' : X_NET_GIMR_maxQueryLength, | |
162 | + 'itvl' : 333, | |
163 | + 'gck' : X_UA[ 'Gecko' ] ? 1 : 0 | |
164 | + } ) | |
165 | + ), | |
166 | + scrolling : 'no', | |
167 | + allowtransparency : 'no', | |
168 | + frameborder : 0, | |
169 | + tabindex : -1 | |
170 | + }), | |
171 | + X_TEMP.X_Net_GIMR_props ); | |
156 | 172 | |
157 | 173 | delete X_TEMP.X_Net_GIMR_init; |
158 | 174 | delete X_TEMP.X_Net_GIMR_props; |
159 | 175 | |
176 | + X_NET_GIMR_requestBatches = []; | |
177 | + | |
160 | 178 | return X_NET_GIMRWrapper; |
161 | 179 | }; |
162 | 180 |
@@ -167,77 +185,50 @@ X_TEMP.X_Net_GIMR_props = { | ||
167 | 185 | _onloadCount : 0, |
168 | 186 | |
169 | 187 | load : function( obj ){ |
170 | - var k, v; | |
188 | + var req = {}, | |
189 | + k, max, sendStr, l, str; | |
171 | 190 | //createURL |
172 | - if( !X_NET_GIMR_gadgetIframe ){ | |
173 | - X_NET_GIMR_gadgetIframe = X_Node_systemNode | |
174 | - .create( 'iframe', { | |
175 | - className : 'hidden-iframe', | |
176 | - name : X_NET_GIMR_iframeName, | |
177 | - id : X_NET_GIMR_iframeName, | |
178 | - src : X_NET_GIMR_GADGET_URL + '#' + encodeURIComponent( | |
179 | - X_JSON_stringify( { | |
180 | - 'img' : X_URL_toAbsolutePath( X_NET_GIMR_IMAGE_URL ), | |
181 | - // https://code.google.com/p/xssinterface/source/browse/trunk/js/xssinterface.js | |
182 | - 'len' : X_UA[ 'IE' ] ? 2000 : 6000, | |
183 | - 'itvl' : 333 | |
184 | - } ) | |
185 | - ), | |
186 | - scrolling : 'no', | |
187 | - allowtransparency : 'no', | |
188 | - frameborder : 0, | |
189 | - tabindex : -1 | |
190 | - } ); | |
191 | + | |
192 | + X_NET_GIMR_requestOriginal = obj; | |
193 | + | |
194 | + for( k in obj ){ | |
195 | + switch( k ){ | |
196 | + case 'url' : | |
197 | + case 'postdata' : | |
198 | + case 'method' : | |
199 | + case 'dataType' : | |
200 | + case 'headers' : | |
201 | + case 'cashe' : | |
202 | + req[ k ] = obj[ k ]; | |
203 | + break; | |
204 | + }; | |
191 | 205 | }; |
192 | 206 | |
193 | - X_NET_GIMR_timerID = X_Timer_add( 333, 0, X_NET_GIMR_detectImageOverIframe ); | |
207 | + max = X_NET_GIMR_maxQueryLength - X_NET_GIMR_GADGET_URL.length - 5; | |
194 | 208 | |
195 | - X_NET_GIMR_requestOriginal = X_Object_deepCopy( obj ); | |
196 | - | |
197 | - //console.dir( obj ); | |
209 | + sendStr = X_JSON_stringify( req ); | |
198 | 210 | |
199 | - X_NET_GIMR_requestOptions = { | |
200 | - 'CONTENT_TYPE' : 'TEXT', | |
201 | - 'GET_FULL_HEADERS' : true, | |
202 | - 'REFRESH_INTERVAL' : 0, | |
203 | - 'url' : obj[ 'url' ] | |
211 | + while( sendStr.length ){ | |
212 | + l = max; | |
213 | + str = encodeURIComponent( sendStr.substr( 0, l ) ); | |
214 | + while( max < str.length ){ | |
215 | + l = l * ( 2 + l / str.length ) / 3 | 0; | |
216 | + str = encodeURIComponent( sendStr.substr( 0, l ) ); | |
217 | + //console.log( l ); | |
218 | + }; | |
219 | + X_NET_GIMR_requestBatches.push( str ); | |
220 | + sendStr = sendStr.substr( l ); | |
221 | + str = ''; | |
204 | 222 | }; |
205 | 223 | |
206 | - for( k in obj ){ | |
207 | - if( v = '' + obj[ k ] ){ | |
208 | - switch( k ){ | |
209 | - case 'postdata' : | |
210 | - X_NET_GIMR_requestOptions[ 'POST_DATA' ] = v; | |
211 | - break; | |
212 | - case 'method' : | |
213 | - X_NET_GIMR_requestOptions[ 'METHOD' ] = v; | |
214 | - break; | |
215 | - case 'dataType' : | |
216 | - // TEXT 以外は無視される? | |
217 | - switch( v = v.toUpperCase() ){ | |
218 | - case 'TEXT' : | |
219 | - case 'JSON' : | |
220 | - X_NET_GIMR_requestOptions[ 'CONTENT_TYPE' ] = v; | |
221 | - break; | |
222 | - case 'DOM' : | |
223 | - case 'HTML' : | |
224 | - case 'HTM' : | |
225 | - case 'XML' : | |
226 | - X_NET_GIMR_requestOptions[ 'CONTENT_TYPE' ] = 'DOM'; | |
227 | - break; | |
228 | - //case 'FEED' : | |
229 | - }; | |
230 | - break; | |
231 | - case 'headers' : | |
232 | - X_NET_GIMR_requestOptions[ 'HEADERS' ] = X_NET_GIMR_requestOriginal[ k ]; | |
233 | - break; | |
234 | - case 'cashe' : | |
235 | - X_NET_GIMR_requestOptions[ 'REFRESH_INTERVAL' ] = 3600; | |
236 | - break; | |
237 | - }; | |
238 | - }; | |
224 | + sendStr = ''; | |
225 | + | |
226 | + if( 1 < X_NET_GIMR_requestBatches.length ){ | |
227 | + X_NET_GIMR_requestBatches[ 0 ] = X_NET_GIMR_requestBatches.length + ':' + X_NET_GIMR_requestBatches[ 0 ]; | |
239 | 228 | }; |
240 | 229 | |
230 | + X_NET_GIMR_timerID = X_Timer_add( 333, 0, this, X_NET_GIMR_detectImageOverIframe ); | |
231 | + | |
241 | 232 | this._busy = true; |
242 | 233 | }, |
243 | 234 |
@@ -28,7 +28,7 @@ oauth2 = X.OAuth2({ | ||
28 | 28 | 'clientSecret' : 'xxxxxxxx', |
29 | 29 | 'authorizeEndpoint' : 'https://accounts.google.com/o/oauth2/auth', |
30 | 30 | 'tokenEndpoint' : 'https://accounts.google.com/o/oauth2/token', |
31 | - 'redirectURI' : X.URL.cleanup( document.location.href ), // 専用の軽量ページを用意してもよいが、現在のアドレスでも可能 | |
31 | + 'redirectURI' : X.URL.cleanup( document.location.href ), // 専用の軽量ページを用意してもよいが、現在のアドレスでも可能, gif は? | |
32 | 32 | 'scopes' : [ 'https://www.googleapis.com/auth/blogger' ], |
33 | 33 | 'refreshMargin' : 300000, |
34 | 34 | // canuse |
@@ -239,7 +239,7 @@ function X_Net_OAuth2_detectAuthPopup(){ | ||
239 | 239 | X_NET_OAUTH2_authorizationWindow = null; |
240 | 240 | X_NET_OAUTH2_authorizationTimerID = 0; |
241 | 241 | |
242 | - return X_Callback_UN_LISTEN; | |
242 | + return X_Callback_UN_LISTEN; | |
243 | 243 | }; |
244 | 244 | }; |
245 | 245 |