OSDN Git Service

Version 0.6.183, refactoring X.HTMLAudio.
[pettanr/clientJs.git] / 0.6.x / js / 06_net / 01_XNetXHR.js
index 0094a05..13ee2f9 100644 (file)
@@ -171,12 +171,11 @@ if( X_XHR_w3c || X_XHR_msXML ){
                                        postdata = obj[ 'postdata' ] || '',\r
                                        timeout  = obj[ 'timeout' ] || 20000,\r
                                        noCache  = obj[ 'cache' ] !== true,\r
+                                       dataType = X_XHR._dataType = obj[ 'dataType' ],\r
                                        xDomain  = !X_URL_isSameDomain( url ),\r
                                        isFile   = X_URL_isLocal( url ),\r
                                        init,\r
                                        type, tmp, p;\r
-\r
-                               X_XHR._dataType = obj[ 'dataType' ];\r
                                \r
                                if( !raw || xDomain !== X_XHR._isXDR || ( X_XHR_createMSXML && isFile !== X_XHR._isMsXML ) ){\r
                                        raw && X_XHR[ 'unlisten' ]( [ 'load', 'readystatechange', 'progress', 'error', 'timeout' ] );\r
@@ -203,14 +202,14 @@ if( X_XHR_w3c || X_XHR_msXML ){
                                raw.open( method, url, async, username, password );\r
                                \r
                                if( raw.responseType !== undefined ){\r
-                                       switch( X_XHR._dataType ){\r
+                                       switch( dataType ){\r
                                                case '' :\r
                                                case 'text' :\r
                                                // js, css\r
                                                        raw.responseType = 'text';\r
                                                        break;\r
                                                case 'json' : // firefox9- は moz-json\r
-                                                       raw.responseType = X_UA[ 'Gecko' ] < 10 ? 'moz-json' : X_UA[ 'Gecko' ] ? X_XHR._dataType : ''; // Iron 37 でエラー\r
+                                                       raw.responseType = X_UA[ 'Gecko' ] < 10 ? 'moz-json' : X_UA[ 'Gecko' ] ? dataType : ''; // Iron 37 でエラー\r
                                                        break;\r
                                                case 'document' :\r
                                                case 'xml' :\r
@@ -222,14 +221,14 @@ if( X_XHR_w3c || X_XHR_msXML ){
                                                case 'blob' :\r
                                                case 'arraybuffer' :\r
                                                // jpeg,jpg,png,gif,mp3,ogg...\r
-                                                       raw.responseType = X_XHR._dataType;\r
+                                                       raw.responseType = dataType;\r
                                                        break;\r
                                        };\r
                                };\r
                                \r
                                // http://www.quirksmode.org/blog/archives/2005/09/xmlhttp_notes_r_1.html\r
                                if( !X_XHR._isMsXML && raw.overrideMimeType ){\r
-                                       type = X_URL_getEXT( url ) || X_XHR._dataType;\r
+                                       type = X_URL_getEXT( url ) || dataType;\r
                                        switch( type ){\r
                                                case 'html' :\r
                                                case 'htm' :\r
@@ -254,6 +253,15 @@ if( X_XHR_w3c || X_XHR_msXML ){
                                                case 'mp4' :\r
                                                        tmp = 'audio/x-' + type;\r
                                                        break;\r
+                                               case 'jpeg' :\r
+                                               case 'jpg' :\r
+                                               case 'png' :\r
+                                               case 'gif' :\r
+                                               case 'bmp' :\r
+                                               case 'ico' :\r
+                                                       tmp = 'text/plain; charset=x-user-defined';\r
+                                                       break;\r
+                                                       \r
                                        };\r
                                        if( tmp = obj[ 'mimeType' ] || tmp ) raw.overrideMimeType( tmp );\r
                                };\r
@@ -269,7 +277,7 @@ if( X_XHR_w3c || X_XHR_msXML ){
                \r
                                        // http://nakigao.sitemix.jp/blog/?p=2040\r
                                        // json 取得時に SafariでHTTP/412のエラー。但し相手が audio の場合この指定があるとロードに失敗する。 iOS8.2, iOS7.1 では遭遇せず\r
-                                       if( X_XHR._dataType === 'json' ){\r
+                                       if( dataType === 'json' ){\r
                                                headers[ 'If-Modified-Since' ] = ( new Date ).toUTCString();\r
                                        };\r
                                        \r
@@ -380,7 +388,7 @@ if( X_XHR_w3c || X_XHR_msXML ){
                        handleEvent : function( e ){\r
                                var raw  = X_XHR[ '_rawObject' ],\r
                                        live = !X_XHR._canceled,\r
-                                       headers, status, data;\r
+                                       headers, status, text, data;\r
 \r
                                switch( e && e.type || 'readystatechange' ){\r
                                        /*\r
@@ -450,6 +458,17 @@ if( X_XHR_w3c || X_XHR_msXML ){
                                                ){\r
                                                        /*\r
                                                         * opera8, safari2, khtml3 で utf8 日本語文字列の文字化け\r
+                                                        * \r
+                                                        * http://www.kawa.net/works/js/jkl/parsexml.html\r
+                                                       \r
+                                                       text = raw[ 'responseText' ];\r
+                                                   //  Safari and Konqueror cannot understand the encoding of text files.\r
+                                                   if( text && ( X_UA[ 'Webkit' ] < 420 || X_UA[ 'KHTML' ] < 4 ) ){\r
+                                                       text = escape( text );\r
+                                                       if ( !text.match( '%u' ) && esc.match( '%' ) ){\r
+                                                           text = decodeURIComponent( text );\r
+                                                       };\r
+                                                   };\r
                                                         */\r
                                                        \r
                                                        // parse json, html, xml, text, script, css\r
@@ -475,6 +494,8 @@ if( X_XHR_w3c || X_XHR_msXML ){
                                                                        break;\r
                                                                case 'blob' :\r
                                                                case 'arraybuffer' :\r
+                                                                       // TODO resoponceBody if( X_UA[ 'IE' ] < 10 )\r
+                                                                       // http://d.hatena.ne.jp/maachang/20130221/1361427565\r
                                                                        data = raw[ 'response' ] || raw[ 'responseText' ]; // とりあえず\r
                                                                        break;\r
                                                        };\r
@@ -522,26 +543,6 @@ JKL.ParseXML.HTTP.prototype.documentElement = function() {
         return this.req.documentElement;                // IXMLDOMDocument\r
     }\r
 };\r
-\r
-// ================================================================\r
-//  method: responseText()\r
-//  return: text string in response body\r
-\r
-JKL.ParseXML.HTTP.prototype.responseText = function() {\r
-    // debug.print( "responseText: "+this.req );\r
-    if ( ! this.req ) return;\r
-\r
-    //  Safari and Konqueror cannot understand the encoding of text files.\r
-    if ( navigator.appVersion.match( "KHTML" ) ) {\r
-        var esc = escape( this.req.responseText );\r
-//        debug.print( "escape: "+esc );\r
-        if ( ! esc.match("%u") && esc.match("%") ) {\r
-            return decodeURIComponent(esc);\r
-        }\r
-    }\r
-\r
-    return this.req.responseText;\r
-};\r
  */\r
                \r
                        onTimeout : function(){\r