リビジョン | 9e607206c5510435fc1daeac93a19427ce33cc6f (tree) |
---|---|
日時 | 2016-10-26 13:41:32 |
作者 | itozyun <itozyun@user...> |
コミッター | itozyun |
Version 0.6.219, Fix the bug of X.Net.
@@ -304,6 +304,7 @@ X_Class_CommonMethods = | ||
304 | 304 | // TODO instanceof に対応したブラウザはそちらを使用 |
305 | 305 | 'instanceOf' : function( klass ){ |
306 | 306 | var Super = this; |
307 | + | |
307 | 308 | if( this.constructor === klass ) return true; |
308 | 309 | while( Super = X_Class_getClassDef( Super ).SuperClass ){ |
309 | 310 | if( Super === klass ) return true; |
@@ -253,7 +253,7 @@ function X_Node_Selector__parse( query, last ){ | ||
253 | 253 | */ |
254 | 254 | function X_Node_find( queryString ){ |
255 | 255 | var HTML = X_Node_html, |
256 | - scope = this.constructor === X_NodeList && this.length ? this : [ this.constructor === Node ? this : X_Node_body ], | |
256 | + scope = this.constructor === X_NodeList && this.length ? this : [ this.constructor === Node || this[ 'instanceOf' ] && this[ 'instanceOf' ]( Node ) ? this : X_Node_body ], | |
257 | 257 | parents = scope, // 探索元の親要素 XNodeList の場合あり |
258 | 258 | // TODO { title : true,,, } |
259 | 259 | noLower = 'title id name class for action archive background cite classid codebase data href longdesc profile src usemap',// + X_Dom_DTD_ATTR_VAL_IS_URI.join( ' ' ), |
@@ -155,7 +155,8 @@ var Node = X[ 'Node' ] = X_EventDispatcher[ 'inherits' ]( | ||
155 | 155 | var uid = X_Node_CHASHE.length, |
156 | 156 | css, xnodes, xnode, parent; |
157 | 157 | |
158 | - if( X_Node_newByTag ){ | |
158 | + // TODO 継承クラスで this.Super('DIV') ができない! -> サブクラスから呼ばれた場合も | |
159 | + if( X_Node_newByTag || this.constructor !== Node ){ | |
159 | 160 | X_Node_newByTag = false; |
160 | 161 | this[ '_tag' ] = v.toUpperCase(); |
161 | 162 | arguments[ 1 ] && this[ 'attr' ]( arguments[ 1 ] ); |
@@ -223,6 +224,7 @@ var Node = X[ 'Node' ] = X_EventDispatcher[ 'inherits' ]( | ||
223 | 224 | X_Node_CHASHE[ this[ '_uid' ] = uid ] = this; |
224 | 225 | }, |
225 | 226 | |
227 | + // TODO .mesure() -> X.Event.MESURED | |
226 | 228 | 'width' : X_Node_width, |
227 | 229 | 'height' : X_Node_height, |
228 | 230 | 'clientWidth' : X_Node_clientWidth, |
@@ -362,6 +364,7 @@ function X_Node_getType( v ){ | ||
362 | 364 | if( X_Type_isString( v ) ){ |
363 | 365 | return '<' === v.charAt( 0 ) && v.charAt( v.length - 1 ) === '>' ? X_NodeType_HTML_STRING : X_NodeType_STRING; |
364 | 366 | }; |
367 | + // Node サブクラスのインスタンス | |
365 | 368 | if( v[ 'instanceOf' ] && v[ 'instanceOf' ]( Node ) ) return X_NodeType_XNODE; |
366 | 369 | return 0; |
367 | 370 | }; |
@@ -171,7 +171,7 @@ if( X_XHR_w3c || X_XHR_msXML ){ | ||
171 | 171 | postdata = obj[ 'postdata' ] || '', |
172 | 172 | timeout = obj[ 'timeout' ] || 20000, |
173 | 173 | noCache = obj[ 'cache' ] !== true, |
174 | - dataType = X_XHR._dataType = obj[ 'dataType' ], // ext が入っている | |
174 | + dataType = X_XHR._dataType = obj[ 'dataType' ], // 明示され無い場合、ext が入っている | |
175 | 175 | xDomain = !X_URL_isSameDomain( url ), |
176 | 176 | isFile = X_URL_isLocal( url ), |
177 | 177 | init, |
@@ -210,13 +210,15 @@ if( X_XHR_w3c || X_XHR_msXML ){ | ||
210 | 210 | raw.responseType = X_XHR._dataType = 'text'; |
211 | 211 | break; |
212 | 212 | case 'json' : // firefox9- は moz-json |
213 | - raw.responseType = X_XHR._dataType = X_UA[ 'Gecko' ] < 10 ? 'moz-json' : X_UA[ 'Gecko' ] ? dataType : ''; // Iron 37 でエラー | |
213 | + raw.responseType = X_UA[ 'Gecko' ] < 10 ? 'moz-json' : X_UA[ 'Gecko' ] ? dataType : ''; // Iron 37 でエラー | |
214 | + //X_XHR._dataType = 'json'; | |
214 | 215 | break; |
215 | 216 | case 'document' : |
216 | 217 | case 'xml' : |
217 | 218 | case 'html' : |
218 | 219 | case 'htm' : |
219 | - // svg | |
220 | + case 'svg' : | |
221 | + case 'vml' : | |
220 | 222 | raw.responseType = X_XHR._dataType = 'document'; |
221 | 223 | break; |
222 | 224 | case 'blob' : |
@@ -230,24 +232,27 @@ if( X_XHR_w3c || X_XHR_msXML ){ | ||
230 | 232 | // http://www.quirksmode.org/blog/archives/2005/09/xmlhttp_notes_r_1.html |
231 | 233 | if( !X_XHR._isMsXML && raw.overrideMimeType ){ |
232 | 234 | switch( type = dataType ){ |
235 | + case 'document' : | |
236 | + case 'xml' : | |
233 | 237 | case 'html' : |
234 | 238 | case 'htm' : |
235 | - case 'xml' : | |
239 | + case 'svg' : | |
240 | + case 'vml' : | |
236 | 241 | tmp = 'text/xml'; |
237 | 242 | break; |
238 | 243 | case 'json' : |
239 | 244 | tmp = 'application/json'; |
240 | 245 | break; |
241 | 246 | case 'mp3' : |
242 | - type = 'mpeg'; | |
247 | + tmp = 'mpeg'; | |
243 | 248 | case 'weba' : |
244 | - type = type || 'webm'; | |
249 | + tmp = tmp || 'webm'; | |
245 | 250 | case 'opus' : |
246 | - type = type || 'ogg'; | |
251 | + tmp = tmp || 'ogg'; | |
247 | 252 | case 'ogg' : |
248 | 253 | case 'wav' : |
249 | 254 | case 'aac' : |
250 | - tmp = 'audio/' + type; | |
255 | + tmp = 'audio/' + ( tmp || type ); | |
251 | 256 | break; |
252 | 257 | case 'm4a' : |
253 | 258 | case 'mp4' : |
@@ -263,7 +268,7 @@ if( X_XHR_w3c || X_XHR_msXML ){ | ||
263 | 268 | break; |
264 | 269 | |
265 | 270 | }; |
266 | - if( tmp = obj[ 'mimeType' ] || tmp ) raw.overrideMimeType( tmp ); | |
271 | + if( obj[ 'mimeType' ] || tmp ) raw.overrideMimeType( obj[ 'mimeType' ] || tmp ); | |
267 | 272 | }; |
268 | 273 | |
269 | 274 | if( !X_XHR._isXDR && ( X_XHR._isMsXML ? 3 <= X_XHR_msXMLVer : raw.setRequestHeader ) ){ // msxml は setRequestHeader getter がいけない |
@@ -274,11 +279,10 @@ if( X_XHR_w3c || X_XHR_msXML ){ | ||
274 | 279 | headers[ 'Cache-Control' ] = 'no-cache'; |
275 | 280 | headers[ 'If-Modified-Since' ] = 'Thu, 01 Jun 1970 00:00:00 GMT'; |
276 | 281 | } */ |
277 | - | |
278 | - // http://nakigao.sitemix.jp/blog/?p=2040 | |
279 | - // json 取得時に SafariでHTTP/412のエラー。但し相手が audio の場合この指定があるとロードに失敗する。 iOS8.2, iOS7.1 では遭遇せず | |
280 | - if( dataType === 'json' ){ | |
281 | - headers[ 'If-Modified-Since' ] = ( new Date ).toUTCString(); | |
282 | + | |
283 | + // http://8note.phpapps.jp/jquery-ajax%E3%81%A7%E3%81%AE412%E3%82%A8%E3%83%A9%E3%83%BC/ | |
284 | + if( dataType === 'json' && X_UA[ 'Safari' ] ){ | |
285 | + headers[ 'If-Modified-Since' ] = 'Thu, 01 Jun 1970 00:00:00 GMT'; | |
282 | 286 | }; |
283 | 287 | |
284 | 288 | // http://boscono.hatenablog.com/entry/2013/12/23/152851 |
@@ -477,7 +481,6 @@ if( X_XHR_w3c || X_XHR_msXML ){ | ||
477 | 481 | data = X_Script_try( X_Object_find, [ raw, 'responseText' ] ); |
478 | 482 | break; |
479 | 483 | case 'json' : |
480 | - case 'moz-json' : | |
481 | 484 | data = X_Script_try( X_Object_find, [ raw, 'response' ] ) || X_Script_try( X_Object_find, [ raw, 'responseText' ] ); |
482 | 485 | // eval() を使っているけど JSON の無いブラウザは XDomain な XHR はできないのでよしとする。 |
483 | 486 | // XDomain な XHR の際は Flash 等で代替し、その中に Json parser も組み込む。 |