+//{+xhrgadget"OpenSocialガジェット通信プロキシ"(Xドメインは元よりXプロトコルな擬似xhr通信を可能にする)[+xhr]\r
+\r
/*\r
* gadgets.io.makeRequest\r
* \r
* \r
*/\r
\r
-\r
-\r
var X_NET_GIMR_canUse = 5.5 <= X_UA[ 'IE' ] || !X_UA[ 'IE' ],\r
\r
X_NET_GIMR_iframeName = 'gadgetProxy_' + ( Math.random() * 100000 | 0 ),\r
\r
X_NET_GIMR_GADGET_XML_URL = 'http://googledrive.com/host/0B4Y86MXyTfuoVUkwTE54T3V1V1U',\r
\r
+ // https://kldleov8fp2dl82hphfmor8riij82tof-a-sites-opensocial.googleusercontent.com/gadgets/ifr\r
X_NET_GIMR_GADGET_URL = 'http://www.ig.gmodules.com/gadgets/ifr?url=' + encodeURIComponent( X_NET_GIMR_GADGET_XML_URL ) + '&nocache=1',\r
\r
X_NET_GIMR_IMAGE_URL = 'img/opacity0.gif',\r
\r
X_NET_GIMR_lastHashString,\r
\r
- X_NET_GIMR_isReceiveBatches, X_NET_GIMR_receivedString;\r
+ X_NET_GIMR_isReceiveBatches, X_NET_GIMR_receivedString = '';\r
\r
\r
function X_NET_GIMR_detectImageOverIframe(){\r
var raw = X_NET_GIMR_gadgetIframe[ '_rawObject' ],\r
- iwin, ret, n, error, data = null;\r
+ iwin, ret, n, error, data = null, zero, e;\r
\r
if( raw ){\r
iwin = raw.contentWindow || ( raw.contentDocument && raw.contentDocument.parentWindow ) || window.frames[ X_NET_GIMR_iframeName ];\r
switch( X_NET_GIMR_phase ){\r
case 0 : // init\r
// TODO 分割\r
- iwin.location.href = X_NET_GIMR_GADGET_URL + '#' + encodeURIComponent( X_NET_GIMR_toJSONString( X_NET_GIMR_requestOptions ) );\r
+ iwin.location.href = X_NET_GIMR_GADGET_URL + '#' + encodeURIComponent( X_JSON_stringify( X_NET_GIMR_requestOptions ) );\r
break;\r
\r
case 1 : // after makeRequest > :ok 待ち\r
n = parseInt( ret );\r
\r
if( X_NET_GIMR_isReceiveBatches ){\r
- X_NET_GIMR_receivedString += ret;\r
+ X_NET_GIMR_receivedString += X_Net_GIMR_decodeLocationHash( ret ); \r
if( --X_NET_GIMR_isReceiveBatches ){\r
iwin.location.href = X_NET_GIMR_GADGET_URL + '#_recived_' + X_NET_GIMR_isReceiveBatches;\r
return;\r
};\r
} else\r
if( 1 < n ){\r
- X_NET_GIMR_receivedString = ret.substr( ( n + ':' ).length );\r
+ ret = ret.substr( ( n + ':' ).length );\r
+ X_NET_GIMR_receivedString = X_Net_GIMR_decodeLocationHash( ret );\r
X_NET_GIMR_isReceiveBatches = --n;\r
iwin.location.href = X_NET_GIMR_GADGET_URL + '#_recived_' + X_NET_GIMR_isReceiveBatches;\r
- // TODO speedup\r
+ // speedup\r
X_NET_GIMR_timerID = X_Timer_add( 16, 0, X_NET_GIMR_detectImageOverIframe );\r
return X_Callback_UN_LISTEN;\r
} else {\r
- X_NET_GIMR_receivedString = ret;\r
+ X_NET_GIMR_receivedString = X_Net_GIMR_decodeLocationHash( ret );\r
};\r
\r
- var zero = String.fromCharCode( 0 );\r
- console.log( _builtin_decodeURI( X_NET_GIMR_receivedString ).split( zero + '002' ).join( '--' ).split( zero + 'E0F' ).join( '--' ) );\r
- ret = X_String_parseTrustedJsonString( _builtin_decodeURI( X_NET_GIMR_receivedString ).split( zero + '002' ).join( '。' ).split( zero + 'F0E' ).join( '.' ) );\r
+ ret = X_String_parseTrustedJsonString( X_NET_GIMR_receivedString );\r
+ \r
\r
X_NET_GIMR_receivedString = '';\r
\r
break;\r
};\r
\r
- console.dir( data || ret );\r
+ //console.dir( data || ret );\r
\r
X_NET_GIMRWrapper._busy = false;\r
\r
X_NET_GIMRWrapper\r
- [ 'asyncDispatch' ]({\r
- type : error ? X_EVENT_ERROR : X_EVENT_SUCCESS,\r
- state : ret[ 'rc' ] || ( error ? ret[ 'code' ] || 400 : 200 ),\r
- data : data,\r
+ [ 'asyncDispatch' ]( e = {\r
+ type : error || ret[ 'rc' ] < 200 || 400 < ret[ 'rc' ] ? X_EVENT_ERROR : X_EVENT_SUCCESS,\r
+ status : ret[ 'rc' ] || ( error ? ret[ 'code' ] || 400 : 200 ),\r
+ response : data,\r
'headers' : ret[ 'headers' ],\r
'message' : error && ret[ 'errors' ].join( '\n' )\r
});\r
+ \r
+ console.dir( e );\r
\r
X_NET_GIMR_timerID = X_NET_GIMR_phase = 0;\r
X_NET_GIMR_lastHashString = ''; \r
};\r
};\r
\r
-// コマンドが長い場合、分割する\r
-function X_NET_GIMR_toJSONString( obj ){\r
- var json = '', k, v;\r
- for( k in obj ){\r
- if( json ) json += ',';\r
- v = obj[ k ];\r
- v = v || v === 0 ? v : null;\r
- json += '"' + k + '":' + ( X_Type_isObject( v ) ? X_NET_GIMR_toJSONString( v ) : X_Type_isString( v ) ? '"' + v + '"' : v );\r
- };\r
- console.log( json );\r
- return '{' + json + '}';\r
+// http://outcloud.blogspot.jp/2015/06/gecko-location-hash.html\r
+function X_Net_GIMR_decodeLocationHash( str ){\r
+ return X_UA[ 'Gecko' ] ? unescape( str ) : decodeURIComponent( str );\r
};\r
\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
\r
-delete X_TEMP.X_Net_GIMR_init;\r
+ delete X_TEMP.X_Net_GIMR_init;\r
+ delete X_TEMP.X_Net_GIMR_props; \r
+ \r
+ return X_NET_GIMRWrapper;\r
+};\r
\r
-// TODO extend NinjaIframe\r
-X_NET_GIMRWrapper = X_Class_override(\r
- X_EventDispatcher(),\r
- {\r
+X_TEMP.X_Net_GIMR_props = {\r
\r
_busy : false,\r
_canceled : false,\r
name : X_NET_GIMR_iframeName,\r
id : X_NET_GIMR_iframeName,\r
src : X_NET_GIMR_GADGET_URL + '#' + encodeURIComponent(\r
- X_NET_GIMR_toJSONString( { 'img' : X_URL_toAbsolutePath( X_NET_GIMR_IMAGE_URL ), 'len' : 1000, 'itvl' : 200 } ) ),\r
+ X_JSON_stringify( { 'img' : X_URL_toAbsolutePath( X_NET_GIMR_IMAGE_URL ), 'len' : 1000, 'itvl' : 200 } ) ),\r
scrolling : 'no',\r
allowtransparency : 'no', \r
frameborder : 0,\r
\r
X_NET_GIMR_requestOriginal = X_Object_deepCopy( obj );\r
\r
- console.dir( obj );\r
+ //console.dir( obj );\r
\r
X_NET_GIMR_requestOptions = {\r
'CONTENT_TYPE' : 'TEXT',\r
this._busy = this._canceled = false;\r
this._onloadCount = 0;\r
}\r
- }\r
-);\r
-\r
-return X_NET_GIMRWrapper;\r
-\r
-};\r
+ };\r
\r
+//}+xhrgadget
\ No newline at end of file