From: itozyun Date: Tue, 9 Jun 2015 12:00:29 +0000 (+0900) Subject: Version 0.6.158, fix X.Net.JSONP. X-Git-Url: http://git.osdn.net/view?p=pettanr%2FclientJs.git;a=commitdiff_plain;h=0a4e04fb0af6e1b2e452d1a8c0822e723d32a0ee Version 0.6.158, fix X.Net.JSONP. --- diff --git a/0.6.x/js/01_core/06_XURL.js b/0.6.x/js/01_core/06_XURL.js index daa6a8e..a75aaaf 100644 --- a/0.6.x/js/01_core/06_XURL.js +++ b/0.6.x/js/01_core/06_XURL.js @@ -35,6 +35,8 @@ X[ 'URL' ] = { 'PARAMS' : X_URL_PARAMS, + 'create' : X_URL_create, + 'toAbsolutePath' : X_URL_toAbsolutePath, 'isSameDomain' : X_URL_isSameDomain, @@ -113,16 +115,20 @@ function X_URL_objToParam( data ){ return result.join( '' ); }; +function X_URL_create( url, params ){ + if( !X_Type_isObject( params ) || !( params = X_URL_objToParam( params ) ) ) return url; + + return url + ( url.indexOf( '?' ) !== -1 ? '&' : '?' ) + params; +}; + function X_URL_ParamToObj( str ){ - var parts = str.split( '&' ), - i = 0, - l = parts.length, - obj = {}, - pair, p; + var i = 0, + obj = {}, + parts, l, pair, p; if( !str ) return obj; - for( ; i < l; ++i ){ + for( parts = str.split( '&' ), l = parts.length; i < l; ++i ){ pair = parts[ i ]; p = pair.indexOf( '=' ); if( p === -1 ){ diff --git a/0.6.x/js/01_core/10_XCallback.js b/0.6.x/js/01_core/10_XCallback.js index 9094791..d0a4d05 100644 --- a/0.6.x/js/01_core/10_XCallback.js +++ b/0.6.x/js/01_core/10_XCallback.js @@ -112,6 +112,11 @@ var __CallbackHash__ = */ func : undefined, /** + * コールバック名。コールバック作成時に関数が無い、関数が入れ替わっていても動作する。 + * @type {string|undefined} + */ + name : undefined, + /** * コールバックの this コンテキスト。 * @type {listener|object|undefined} */ diff --git a/0.6.x/js/01_core/13_XEventDispatcher.js b/0.6.x/js/01_core/13_XEventDispatcher.js index 01ce6c7..b2a0bdc 100644 --- a/0.6.x/js/01_core/13_XEventDispatcher.js +++ b/0.6.x/js/01_core/13_XEventDispatcher.js @@ -195,6 +195,7 @@ var X_EventDispatcher = X[ 'EventDispatcher' ] = if( !listeners || !( list = listeners[ opt_type ] ) ) return false; if( opt_arg1 === undefined ) return X_EventDispatcher_needsIndex ? 0 : true; + // TODO callbackHash か?判定が不十分! if( opt_arg1.kind ){ cbHash = opt_arg1; } else { diff --git a/0.6.x/js/02_dom/22_XTreeBuilder.js b/0.6.x/js/02_dom/22_XTreeBuilder.js index 7daff08..8a6c74a 100644 --- a/0.6.x/js/02_dom/22_XTreeBuilder.js +++ b/0.6.x/js/02_dom/22_XTreeBuilder.js @@ -22,26 +22,27 @@ if( X_UA[ 'MacIE' ] ){ //node.data = ''; l = X_TEMP._removalTextNodes.length; if( parent ){ - //!l && X_Timer_once( 0, X_TEMP._timerRemove ); - //X_TEMP._removalTextNodes[ l ] = node; - //var str=[],p; - //for( p in node ){ - // str[str.length] = p; - //}; - //alert( str.join( ',' ) + parent.innerHTML ); - //node.nodeValue = ''; - //parent.replaceChild( document.createElement( 'span' ), node ); - //var e; - //var f = document.createDocumentFragment(); - //f.appendChild( e = document.createElement( 'span' ) ); - //f.replaceChild( node, e ); - //e.appendChild( f ); - //parent.appendChild( e = document.createElement( 'span' ) ); - //e.appendChild( node ); - //parent.removeChild( e ); - //node.parentNode = null; - //document.body.appendChild( node ); - //parent.replaceChild( document.createComment( '' ), node ); + /* + !l && X_Timer_once( 0, X_TEMP._timerRemove ); + X_TEMP._removalTextNodes[ l ] = node; + var str=[],p; + for( p in node ){ + str[str.length] = p; + }; + alert( str.join( ',' ) + parent.innerHTML ); + node.nodeValue = ''; + parent.replaceChild( document.createElement( 'span' ), node ); + var e; + var f = document.createDocumentFragment(); + f.appendChild( e = document.createElement( 'span' ) ); + f.replaceChild( node, e ); + e.appendChild( f ); + parent.appendChild( e = document.createElement( 'span' ) ); + e.appendChild( node ); + parent.removeChild( e ); + node.parentNode = null; + document.body.appendChild( node ); + parent.replaceChild( document.createComment( '' ), node ); */ document.body.appendChild( node ); return; if( parent.parentNode !== document.body ){ @@ -105,7 +106,8 @@ if( X_UA[ 'Opera7' ] ){ * http://kojs.sukobuto.com/docs/visible-binding * IE6 には、「空の span エレメントに続く空白は無視される」という謎な癖があります。 */ -X_ViewPort[ 'listenOnce' ]( X_EVENT_PRE_INIT, + +X_TEMP._onPreInit = X_UA_DOM.W3C ? (function(){ var r = X_Node_body, @@ -121,7 +123,7 @@ X_ViewPort[ 'listenOnce' ]( X_EVENT_PRE_INIT, // textarea の内容を控えて、消す。xnode tree 構築後に復帰。でないと、html パースでこける //X_UA[ 'MacIE' ] && alert( body.innerHTML ); // cleanup tree - (function/*cleanUpTree*/( elm, skip, head ){ + function cleanUpTree( elm, skip, head ){ var nodes = X_Object_cloneArray( elm.childNodes ), i = 0, l = nodes.length, @@ -141,7 +143,7 @@ X_ViewPort[ 'listenOnce' ]( X_EVENT_PRE_INIT, continue; } else { // pre タグ以下はスペースの置換は行わない - node.childNodes && node.childNodes.length && /*cleanUpTree*/arguments.callee( node, skip || X_Dom_DTD_SKIP_CLEANUP_TAGS[ tag ], head ); + node.childNodes && node.childNodes.length && cleanUpTree( node, skip || X_Dom_DTD_SKIP_CLEANUP_TAGS[ tag ], head ); }; textNode = null; break; @@ -167,7 +169,9 @@ X_ViewPort[ 'listenOnce' ]( X_EVENT_PRE_INIT, //++count; }; }; - })( X_UA[ 'MacIE' ] ? ( copy = body.cloneNode( true ) ) : body ); + }; + + cleanUpTree( X_UA[ 'MacIE' ] ? ( copy = body.cloneNode( true ) ) : body ); if( X_UA[ 'MacIE' ] ){ document.write( html = copy.innerHTML ); @@ -189,28 +193,18 @@ X_ViewPort[ 'listenOnce' ]( X_EVENT_PRE_INIT, }; }; - body.appendChild( elmProgress = document.createElement( 'div' ) ); + body.appendChild( X_TEMP.elmProgress = elmProgress = document.createElement( 'div' ) ); elmProgress.style.cssText = 'position:absolute;top:0;left:0;z-index:9999;width:0;height:0.5em;background:#00f;overflow:hidden;'; elmProgress.setAttribute( 'style', 'position:absolute;top:0;left:0;z-index:9999;width:0;height:0.5em;background:#00f;overflow:hidden;' ); - X_HTMLParser_asyncParse( html, true ) - [ 'listen' ]( X_EVENT_PROGRESS, - function( e ){ - elmProgress.style.width = ( e[ 'percent' ] * 100 | 0 ) + '%'; - } - ) - [ 'listenOnce' ]( X_EVENT_SUCCESS, - function( e ){ - var xnodes = X_Node_body[ '_xnodes' ] = [], t; - xnodes.push.apply( xnodes, e.xnodes ); - elmProgress.style.width = '100%'; + X_TEMP._body = body; - X_TEMP.asyncCreateTree( X_Node_body, body.childNodes, elmProgress ); - } - ); + X_HTMLParser_asyncParse( html, true ) + [ 'listen' ]( X_EVENT_PROGRESS, X_TEMP._handleEvent ) + [ 'listenOnce' ]( X_EVENT_SUCCESS, X_TEMP._handleEvent ); }) : -X_UA_DOM.IE4 ? +// X_UA_DOM.IE4 ? (function(){ var r = X_Node_body, body = r[ '_rawObject' ], @@ -218,7 +212,7 @@ X_UA_DOM.IE4 ? html; if( !X_TEMP.X_Dom_useBuilder ) return; - + /* * http://support.microsoft.com/kb/812417/ja * PRB: outerHTML の HTML 要素のプロパティは、既定の属性は表示されません。 @@ -227,27 +221,39 @@ X_UA_DOM.IE4 ? */ html = body.innerHTML; body.insertAdjacentHTML( 'BeforeEnd', '
' ); - elmProgress = document.all[ elmProgress ]; + X_TEMP.elmProgress = document.all[ elmProgress ]; + + X_TEMP._body = body; X_HTMLParser_asyncParse( html, true ) - [ 'listen' ]( X_EVENT_PROGRESS, - function( e ){ - elmProgress.style.width = ( e.percent * 100 | 0 ) + '%'; - } - ) - [ 'listenOnce' ]( X_EVENT_SUCCESS, - function( e ){ - var xnodes = X_Node_body[ '_xnodes' ] = [], t; - xnodes.push.apply( xnodes, e.xnodes ); - elmProgress.style.width = '100%'; - - X_TEMP.asyncCreateTree( X_Node_body, body.childNodes || body.children, elmProgress ); - } - ); -}) : -(function(){ + [ 'listen' ]( X_EVENT_PROGRESS, X_TEMP._handleEvent ) + [ 'listenOnce' ]( X_EVENT_SUCCESS, X_TEMP._handleEvent ); +}); + +X_ViewPort[ 'listenOnce' ]( X_EVENT_PRE_INIT, X_TEMP._onPreInit ); + +X_TEMP._handleEvent = function( e ){ + var elmProgress = X_TEMP.elmProgress, xnodes; -}) ); + switch( e.type ){ + case X_EVENT_PROGRESS : + elmProgress.style.width = ( e.percent * 100 | 0 ) + '%'; + break; + + case X_EVENT_SUCCESS : + xnodes = X_Node_body[ '_xnodes' ] = []; + + xnodes.push.apply( xnodes, e.xnodes ); + elmProgress.style.width = '100%'; + + X_TEMP.asyncCreateTree( X_Node_body, X_TEMP._body.childNodes || X_TEMP._body.children, elmProgress ); + + delete X_TEMP._onPreInit; + delete X_TEMP._body; + delete X_TEMP.elmProgress; + break; + }; +}; X_TEMP.asyncCreateTree = function( parent, elems, elmProgress, async ){ var xnodes = async ? 0 : X_Object_cloneArray( parent[ '_xnodes' ] ), @@ -311,6 +317,7 @@ X_TEMP.asyncCreateTree = function( parent, elems, elmProgress, async ){ console.log( 'xtree 作成完了' ); X_ViewPort[ 'asyncDispatch' ]( X_EVENT_XTREE_READY ); elmProgress.parentNode ? elmProgress.parentNode.removeChild( elmProgress ) : ( elmProgress.outerHTML = '' ); + delete X_TEMP.asyncCreateTree; delete X_TEMP.bindElementToXnode; delete X_TEMP.X_Dom_useBuilder; diff --git a/0.6.x/js/05_util/01_XNinjaIframe.js b/0.6.x/js/05_util/01_XNinjaIframe.js index 8507c5e..e16f550 100644 --- a/0.6.x/js/05_util/01_XNinjaIframe.js +++ b/0.6.x/js/05_util/01_XNinjaIframe.js @@ -140,7 +140,8 @@ function X_Util_NinjaIframe_writeToIframe( that ){ var raw = that[ '_rawObject' ], idoc = raw.contentDocument || that._iwin.document, html = that._contentHTML; - + + that._ready = true; // これを削除すると ie6,7,8 で Stack overflow at line : 0 意味不明 delete that._contentHTML; idoc.open(); diff --git a/0.6.x/js/06_net/00_XNet.js b/0.6.x/js/06_net/00_XNet.js index 55f0496..fdc66aa 100644 --- a/0.6.x/js/06_net/00_XNet.js +++ b/0.6.x/js/06_net/00_XNet.js @@ -31,6 +31,7 @@ *

XHR 用プロパティ

*
*
method
'GET', 'POST' 未指定かつ postdata を設定している場合、'POST' になる。 + *
params
url パラメータを object で渡すことが出来る。 *
postdata
string, object の場合は X.String.serialize される。 *
async
boolean *
username
BASIC 認証 @@ -45,6 +46,14 @@ *
canUse
未実装。gadget proxy, YQL, YPipes 等のマッシュアップの許可。現在は test : 'gadget' としている *
* + *

JSONP 用プロパティ

+ *
+ *
params
url パラメータを object で渡すことが出来る。 + *
callbackName
callback(json) コールバック名が固定されている際に指定。または &callback=hoge 以外の名前でコールバックを指定する場合に params と callbackName に書いておく。url パラメータに callback が無く、callbackName もない場合、フレームワーク内で自動で設定される + *
charset
ページと異なるjsonpを読み込む場合に指定 'EUC-JP', 'Shift-JIS' 等 script タグの charset に入る。https://code.google.com/p/ajaxzip3/issues/detail?id=5 + *
useFireWall
異なるドメインに jsonp を読み込んだ後、xdomain iframe 通信を使ってデータを受け取る。不正なコードの実行を防ぐことが出来る、未実装 + *
+ * * @alias X.Net * @class 各種ネットワーク機能をラップしインターフェイスを共通化する。 * @constructs Net @@ -54,11 +63,14 @@ * .listen( X.Event.PROGRESS ) * .listenOnce( [ X.Event.SUCCESS, X.Event.ERROR, X.Event.TIMEOUT, X.Event.CANCELED ] ); * + * // XHR - GET + * var net = X.Net( urlString ); + * * // XHR - POST * var net = X.Net( { xhr : urlString, postdata : myData } ); * * // JSONP - * var net = X.Net( { jsonp : urlString, staticCallbackName : callbackName, useXDomainWall : false } ); + * var net = X.Net( { jsonp : urlString, params : params, callbackName : callbackName, charset : charset, useFireWall : false } ); * * // Form * var net = X.Net( { form : urlString, method : 'POST', target : '_self', params : {} } ); // _self, _parent, _top の場合、ページから離脱する @@ -77,53 +89,35 @@ X[ 'Net' ] = X_EventDispatcher[ 'inherits' ]( 'netVersion' : 0, 'Constructor' : function( urlOrObject, opt_options ){ - var v, opt, url, type, auth; + var opt, url, type, auth; if( X_Type_isObject( opt = urlOrObject ) ){ - if( X_Type_isString( v = opt[ 'xhr' ] ) ){ - url = v; + if( X_Type_isString( url = opt[ 'xhr' ] ) ){ type = X_NET_TYPE_XHR; } else - if( X_Type_isString( v = opt[ 'jsonp' ] ) ){ - url = v; + if( X_Type_isString( url = opt[ 'jsonp' ] ) ){ type = X_NET_TYPE_JSONP; } else - if( X_Type_isString( v = opt[ 'img' ] || opt[ 'image' ] ) ){ - url = v; + if( X_Type_isString( url = opt[ 'img' ] || opt[ 'image' ] ) ){ type = X_NET_TYPE_IMAGE; } else - if( X_Type_isString( v = opt[ 'form' ] ) ){ - url = v; + if( X_Type_isString( url = opt[ 'form' ] ) ){ type = X_NET_TYPE_FORM; + //{+dev } else - if( X_Type_isString( v = opt[ 'type' ] ) ){ - - switch( v ){ - case 'xhr' : - type = X_NET_TYPE_XHR; - break; - case 'jsonp' : - type = X_NET_TYPE_JSONP; - break; - case 'img' : - case 'image' : - type = X_NET_TYPE_IMAGE; - break; - case 'from' : - type = X_NET_TYPE_FORM; - break; - default : - alert( 'X.Net args error' ); - return; - }; + if( !( type = X_NET_NAME_TO_ID[ opt[ 'type' ] ] ) ){ + alert( 'X.Net args error' ); + return; + //}+dev + } else { url = opt[ 'url' ]; }; - + //{+dev if( !X_Type_isString( url ) ){ alert( 'X.Net args error' ); return; }; - + //}+dev } else if( X_Type_isString( urlOrObject ) ){ url = urlOrObject; @@ -134,12 +128,14 @@ X[ 'Net' ] = X_EventDispatcher[ 'inherits' ]( type = X_NET_TYPE_XHR; opt = { 'url' : url, 'method' : 'GET' }; }; - + //{+dev } else { alert( 'X.Net args error' ); return; + //}+dev }; + // auth の退避 if( auth = opt[ 'auth' ] ){ delete opt[ 'auth' ]; }; @@ -147,12 +143,16 @@ X[ 'Net' ] = X_EventDispatcher[ 'inherits' ]( if( auth ){ opt[ 'auth' ] = auth; // auth は deep copy されるとまずい }; - opt.netType = type; - opt[ 'url' ] = url; + + // params を url に追加 + if( opt[ 'params' ] ){ + url = X_URL_create( url, opt[ 'params' ] ); + delete opt[ 'params' ]; + }; if( type === X_NET_TYPE_XHR ){ opt[ 'method' ] = opt[ 'method' ] || ( opt[ 'postdata' ] ? 'POST' : 'GET' ); - + // XDomain 不可 -> Flash, Gears, Silverlight, canUseGadget なら gadget に切替? // PUT DELETE UPDATE 不可 -> Flash, Gears, Silverlight, canUseGadget なら gadget に切替? // xプロトコル な binary のロード -> gadget 内で proxyURL による XHR @@ -161,6 +161,9 @@ X[ 'Net' ] = X_EventDispatcher[ 'inherits' ]( opt[ 'dataType' ] = opt[ 'dataType' ] || X_URL_getEXT( url ); }; + opt.netType = type; + opt[ 'url' ] = url; + X_Pair_create( this, opt ); this[ 'listen' ]( [ X_EVENT_BEFORE_KILL_INSTANCE, X_EVENT_KILL_INSTANCE ], X_NET_proxyDispatch ); @@ -192,6 +195,14 @@ var X_NET_TYPE_XHR = 1, X_NET_TYPE_FORM = 3, X_NET_TYPE_IMAGE = 4, + X_NET_NAME_TO_ID = { + 'xhr' : X_NET_TYPE_XHR, + 'jsonp' : X_NET_TYPE_JSONP, + 'form' : X_NET_TYPE_FORM, + 'img' : X_NET_TYPE_IMAGE, + 'image' : X_NET_TYPE_IMAGE + }, + X_NET_QUEUE_LIST = [], X_NET_XHRWrapper, diff --git a/0.6.x/js/06_net/02_XNetJSONP.js b/0.6.x/js/06_net/02_XNetJSONP.js index 7b1c4da..6918382 100644 --- a/0.6.x/js/06_net/02_XNetJSONP.js +++ b/0.6.x/js/06_net/02_XNetJSONP.js @@ -66,10 +66,22 @@ X_TEMP.X_NET_JSONP_params = { load : function( option ){ //createURL var url = option[ 'url' ], - json2Path = 'js/libs/json2.js', + params = option[ 'params' ], + callback = option[ 'callbackName' ], + charset = option[ 'charset' ], + json2Path = window.RegExp ? 'js/libs/json2.js' : 'js/libs/json2_regfree.js', json2FileSize = 18103, html; + url = X_URL_create( url, params ); + + if( !callback && !( callback = X_URL_ParamToObj( url.split( '?' )[ 1 ] )[ 'callback' ] ) ){ + url += '&callback=cb'; + callback = 'cb'; + }; + + charset = charset ? ' charset="' + charset + '"' : ''; + // TODO ' 化 恐らくアンチウイルスソフトが反応しないための対策 // document.postMessage()→window.postMessage() (Opera 9.50 build 9841 -) // http://d.hatena.ne.jp/cnrd/20080518/1211099169 @@ -81,9 +93,9 @@ X_TEMP.X_NET_JSONP_params = { '', - '', + '', '' ]; X_Net_JSONP_maxOnloadCount = 2; @@ -96,19 +108,19 @@ X_TEMP.X_NET_JSONP_params = { // http://blog.livedoor.jp/dankogai/archives/51503830.html // Ajax - IE8にもJSON入ってます。使えるとは限らないけど // Compatibility mode (別名Quirks mode) では、JSONオブジェクトは無効になります。iframeもだめです - '', + '', '' /* 以下のコードは XP ie8 では動くけど、win8 IE11(8モード)で動かない 開発の便宜を取って,setTimeout を挟む '', '' */ ]; @@ -116,10 +128,10 @@ X_TEMP.X_NET_JSONP_params = { } else if( X_UA[ 'IE9' ] ){ html = [ - '', + '', '' @@ -130,20 +142,20 @@ X_TEMP.X_NET_JSONP_params = { html = [ '', - '' + '' ]; X_Net_JSONP_maxOnloadCount = 1; } else if( X_UA[ 'IE4' ] || X_UA[ 'MacIE' ] ){ html = [ '', - '', + '', '', - '', + '', '', '', - '' + '' ]; X_Net_JSONP_maxOnloadCount = 2; }; diff --git a/0.6.x/js/06_net/04_XNetImage.js b/0.6.x/js/06_net/04_XNetImage.js index f788116..0375e74 100644 --- a/0.6.x/js/06_net/04_XNetImage.js +++ b/0.6.x/js/06_net/04_XNetImage.js @@ -10,31 +10,28 @@ var X_Net_Image_hasImage = !!window[ 'Image' ], X_Net_Image_image = X_Net_Image_hasImage && new Image(), // IE では厳密には HTMLImageElement ではなく、appendChild してもサイズが取れず、removeChild に失敗する X_Net_Image_isElement = !( X_UA[ 'IE' ] < 9 ) && X_Type_isHTMLElement( X_Net_Image_image ); - - -if( !X_Net_Image_hasImage ){ - alert( 'no Image!' ); -} else -if( X_Net_Image_isElement ){ - //alert( 'X_Net_Image_isElement ' + X_Net_Image_isElement ); -}; /* * TODO * new Image() のときに Image オブジェクトを作るもの(IE8-)と、HTMLImageElement を作るものがある。 * Image は、X.EventDispatcher で、 は X.Node で。 - * - * Opera7 では毎回 image を作る必要あり、src が異なればOK? */ X_TEMP.X_NET_Image_init = function(){ + X_NET_ImageWrapper = X_Class_override( + X_Net_Image_isElement ? Node( X_Net_Image_image ) : X_EventDispatcher( X_Net_Image_image ), + X_TEMP.X_NET_Image_params + ); + + X_NET_ImageWrapper[ 'listen' ]( [ 'load', 'error' /*, 'abort'*/, X_EVENT_KILL_INSTANCE ], X_NET_Image_handleEvent ); + + delete X_TEMP.X_NET_Image_init; + delete X_TEMP.X_NET_Image_params; + + return X_NET_ImageWrapper; +}; -delete X_TEMP.X_NET_Image_init; - -X_NET_ImageWrapper = X_Class_override( - !X_Net_Image_isElement ? X_EventDispatcher( X_Net_Image_image ) : Node( X_Net_Image_image ), - { - +X_TEMP.X_NET_Image_params = { _busy : false, tick : 0, timerID : 0, @@ -59,8 +56,9 @@ X_NET_ImageWrapper = X_Class_override( }, cancel : function(){ + var raw = this[ '_rawObject' ]; // abort がある? - this[ '_rawObject' ] && this[ '_rawObject' ].abort && this[ '_rawObject' ].abort(); + raw && raw.abort && raw.abort(); // this[ '_rawObject' ].src = ''; this._busy = false; this.finish = true; @@ -75,21 +73,16 @@ X_NET_ImageWrapper = X_Class_override( this.finished = false; this.abspath = ''; } - } -); - -X_NET_ImageWrapper[ 'listen' ]( [ 'load', 'error' /*, 'abort'*/, X_EVENT_KILL_INSTANCE ], X_NET_Image_handleEvent ); - -return X_NET_ImageWrapper; - -}; + }; function X_NET_Image_detect(){ + var raw = this[ '_rawObject' ]; + if( this.finish ) return; - if( this[ '_rawObject' ] && this[ '_rawObject' ].complete ){ + if( raw && raw.complete ){ this._busy = false; this.finish = true; - if( this[ '_rawObject' ].width ) return; + if( raw.width ) return; X_Timer_remove( this.timerID ); this.timerID = this[ 'asyncDispatch' ]( X_EVENT_ERROR ); } else diff --git a/0.6.x/js/06_net/10_XOAuth2.js b/0.6.x/js/06_net/10_XOAuth2.js index ab34837..ef18be5 100644 --- a/0.6.x/js/06_net/10_XOAuth2.js +++ b/0.6.x/js/06_net/10_XOAuth2.js @@ -105,14 +105,15 @@ X[ 'OAuth2' ] = X_EventDispatcher[ 'inherits' ]( h = pair[ 'authorizeWindowHeight' ] || 500; X_NET_OAUTH2_authorizationWindow = window.open( - url + ( ( url.indexOf( '?' ) !== -1 ) ? '&' : '?' ) + X_URL_objToParam( + X_URL_create( url, { 'response_type' : 'code', 'client_id' : pair[ 'clientID' ], 'redirect_uri' : pair[ 'redirectURI' ], 'scope' : ( pair[ 'scopes' ] || []).join(' ') } - ), 'oauthauthorize', + ), + 'oauthauthorize', 'width=' + w + ',height=' + h + ',left=' + ( screen.width - w ) / 2 @@ -352,7 +353,7 @@ function X_NET_OAUTH2_updateRequest( oauth2, request ){ headers; if( token && mechanism === 'param' ){ - request[ 'url' ] = url + ((url.indexOf('?') !== -1) ? '&' : '?') + 'bearer_token=' + encodeURIComponent( token ); + request[ 'url' ] = X_URL_create( url, { 'bearer_token' : encodeURIComponent( token ) } ); }; if( token && ( !mechanism || mechanism === 'header' ) ){