X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=0.6.x%2Fjs%2F06_net%2F02_XNetJSONP.js;h=b233d7b9aa6fcc518e0c1750b88b36cc1c42290d;hb=9e04e2a1221a92960a74e550bc3fd809caf3cd1c;hp=efff27d3d5b0521ecce46b2e1f895cd5ca6fc222;hpb=3d352d8bf476ab57cc333e8d02d0e6ea5efa69b7;p=pettanr%2FclientJs.git diff --git a/0.6.x/js/06_net/02_XNetJSONP.js b/0.6.x/js/06_net/02_XNetJSONP.js index efff27d..b233d7b 100644 --- a/0.6.x/js/06_net/02_XNetJSONP.js +++ b/0.6.x/js/06_net/02_XNetJSONP.js @@ -24,43 +24,43 @@ // TODO iframe useful or not. TODO check dynamicIframe // TODO file: では http: は使えない -X_TEMP.X_NET_JSONP_cb = function( accessKey, jsonString, time, opt_json2FileSize ){ - if( accessKey !== X_NET_JSONP_ACCESS_KEY || !X_NET_JSONPWrapper._busy ) return; +X_TEMP.X_JSONP_cb = function( accessKey, jsonString, time, opt_json2FileSize ){ + if( accessKey !== X_JSONP_ACCESS_KEY || !X_JSONP._busy ) return; - X_NET_JSONPWrapper._busy = false; + X_JSONP._busy = false; - X_NET_JSONPWrapper + X_JSONP [ 'asyncDispatch' ]( { type : jsonString ? X_EVENT_SUCCESS : X_EVENT_ERROR, response : X_JSON_parseTrustableString( jsonString ) } ); - X_Net_JSONP_errorTimerID && X_Timer_remove( X_Net_JSONP_errorTimerID ); + X_JSONP_errorTimerID && X_Timer_remove( X_JSONP_errorTimerID ); console.log( 'ms : ' + time + ' speed : ' + ( ( jsonString.length + ( opt_json2FileSize || 0 ) ) / time * 1000 ) + ' バイト/秒.' ); }; -var X_NET_JSONP_ACCESS_KEY = Math.random(), +var X_JSONP_ACCESS_KEY = Math.random(), - X_Net_JSONP_maxOnloadCount, + X_JSONP_maxOnloadCount, - X_Net_JSONP_onloadCount = 0, + X_JSONP_onloadCount = 0, - X_Net_JSONP_errorTimerID; + X_JSONP_errorTimerID; -X_TEMP.X_NET_JSONP_init = function(){ - X[ 'Net' ][ '__json_cb__' ] = X_TEMP.X_NET_JSONP_cb; +X_TEMP.X_JSONP_init = function(){ + X[ 'Net' ][ '__json_cb__' ] = X_TEMP.X_JSONP_cb; - X_NET_JSONPWrapper = X_Class_override( X_NinjaIframe(), X_TEMP.X_NET_JSONP_params ); + X_JSONP = X_Class_override( X_NinjaIframe(), X_TEMP.X_JSONP_params ); - delete X_TEMP.X_NET_JSONP_cb; - delete X_TEMP.X_NET_JSONP_init; - delete X_TEMP.X_NET_JSONP_params; + delete X_TEMP.X_JSONP_cb; + delete X_TEMP.X_JSONP_init; + delete X_TEMP.X_JSONP_params; - return X_NET_JSONPWrapper; + return X_JSONP; }; -X_TEMP.X_NET_JSONP_params = { +X_TEMP.X_JSONP_params = { _busy : false, _canceled : false, @@ -75,6 +75,11 @@ X_TEMP.X_NET_JSONP_params = { json2FileSize = 18103, html; + // file プロトコルで外部アクセスの禁止 + if( !X_URL_isSameProtocol( url ) ){ + return X_JSONP[ 'asyncDispatch' ]( X_EVENT_ERROR ); + }; + url = X_URL_create( url, params ); if( !callback && !( callback = X_URL_paramToObj( url.split( '?' )[ 1 ] )[ 'callback' ] ) ){ @@ -95,12 +100,12 @@ X_TEMP.X_NET_JSONP_params = { '', '', '' ]; - X_Net_JSONP_maxOnloadCount = 2; + X_JSONP_maxOnloadCount = 2; } else if( X_UA[ 'IE8' ] ){ html = [ @@ -108,42 +113,42 @@ X_TEMP.X_NET_JSONP_params = { '' /* 以下のコードは XP ie8 では動くけど、win8 IE11(8モード)で動かない 開発の便宜を取って,setTimeout を挟む '', '' */ ]; - X_Net_JSONP_maxOnloadCount = 2; + X_JSONP_maxOnloadCount = 2; } else if( X_UA[ 'IE9' ] ){ html = [ '', '' ]; - X_Net_JSONP_maxOnloadCount = 2; + X_JSONP_maxOnloadCount = 2; } else if( window[ 'JSON' ] ){ html = [ '', '' ]; - X_Net_JSONP_maxOnloadCount = 1; + X_JSONP_maxOnloadCount = 1; } else if( X_UA[ 'IE4' ] || X_UA[ 'MacIE' ] ){ html = [ @@ -151,13 +156,13 @@ X_TEMP.X_NET_JSONP_params = { '', '' ]; - X_Net_JSONP_maxOnloadCount = 3; + X_JSONP_maxOnloadCount = 3; } else if( X_UA[ 'IE' ] < 8 ){ // ie5-7 html = [ @@ -165,58 +170,58 @@ X_TEMP.X_NET_JSONP_params = { '', '' ]; - X_Net_JSONP_maxOnloadCount = 3; + X_JSONP_maxOnloadCount = 3; } else { html = [ '', '', '' ]; - X_Net_JSONP_maxOnloadCount = 2; + X_JSONP_maxOnloadCount = 2; }; - X_NET_JSONPWrapper + X_JSONP [ 'refresh' ]( html.join( '' ) ) - [ 'listen' ]( [ 'ninjaload', 'ninjaerror' ], X_NET_JSONP_iframeListener ); + [ 'listen' ]( [ 'ninjaload', 'ninjaerror' ], X_JSONP_iframeListener ); - X_NET_JSONPWrapper._busy = true; + X_JSONP._busy = true; }, cancel : function(){ - X_NET_JSONPWrapper.reset(); - X_NET_JSONPWrapper._canceled = true; + X_JSONP.reset(); + X_JSONP._canceled = true; }, reset : function(){ - X_NET_JSONPWrapper._busy = X_NET_JSONPWrapper._canceled = false; - X_NET_JSONPWrapper[ 'unlisten' ]( [ 'ninjaload', 'ninjaerror' ], X_NET_JSONP_iframeListener ); - X_NET_JSONPWrapper[ 'refresh' ]( '' ); - X_Net_JSONP_errorTimerID && X_Timer_remove( X_Net_JSONP_errorTimerID ); - X_Net_JSONP_errorTimerID = X_Net_JSONP_onloadCount = 0; + X_JSONP._busy = X_JSONP._canceled = false; + X_JSONP[ 'unlisten' ]( [ 'ninjaload', 'ninjaerror' ], X_JSONP_iframeListener ); + X_JSONP[ 'refresh' ]( '' ); + X_JSONP_errorTimerID && X_Timer_remove( X_JSONP_errorTimerID ); + X_JSONP_errorTimerID = X_JSONP_onloadCount = 0; } }; -function X_NET_JSONP_iframeListener( e ){ +function X_JSONP_iframeListener( e ){ switch( e.type ){ case 'ninjaload' : - console.log( 'iframe onload, but ' + X_Net_JSONP_onloadCount + ' < ' + X_Net_JSONP_maxOnloadCount ); - if( ++X_Net_JSONP_onloadCount < X_Net_JSONP_maxOnloadCount ) return; + console.log( 'iframe onload, but ' + X_JSONP_onloadCount + ' < ' + X_JSONP_maxOnloadCount ); + if( ++X_JSONP_onloadCount < X_JSONP_maxOnloadCount ) return; // TODO callback が無ければ error -> timeout を観る? - X_Net_JSONP_errorTimerID = X_NET_JSONPWrapper[ 'asyncDispatch' ]( 1000, X_EVENT_ERROR ); + X_JSONP_errorTimerID = X_JSONP[ 'asyncDispatch' ]( 1000, X_EVENT_ERROR ); break; case 'ninjaerror' : console.log( 'iframe onerror' ); - X_NET_JSONPWrapper[ 'asyncDispatch' ]( X_EVENT_ERROR ); + X_JSONP[ 'asyncDispatch' ]( X_EVENT_ERROR ); break; }; return X_CALLBACK_UN_LISTEN;