OSDN Git Service

Version 0.6.175, fix X.UA & X.WebAudio.
[pettanr/clientJs.git] / 0.6.x / js / 01_core / 02_XUA.js
index fafe846..426b486 100644 (file)
@@ -136,26 +136,65 @@ var X_UA = X[ 'UA' ] = {},
                X_UA[ 'webOS' ]  = true; // webOS\r
        } else\r
        if( sys.indexOf( 'Win' ) + 1 ){\r
-               console.log( 'Win' );\r
-               /**\r
-                * @alias X.UA.Windows\r
-                * @type {boolean}\r
-                */\r
-               X_UA[ 'Windows' ]  = true;\r
+\r
                switch( sys ){\r
+                       case 'WinCE' :\r
+                               /**\r
+                                * @alias X.UA.WinCE\r
+                                * @type {boolean}\r
+                                */\r
+                               X_UA[ sys ] = true;\r
+                               break;\r
                        case 'Win16' :\r
                        case 'Win32' :\r
                        case 'Win64' :\r
-                       case 'WinCE' :\r
                                /**\r
                                 * @alias X.UA.Win16\r
                                 * @alias X.UA.Win32\r
                                 * @alias X.UA.Win64\r
-                                * @alias X.UA.WinCE\r
                                 * @type {boolean}\r
                                 */\r
                                X_UA[ sys ] = true;\r
+                               \r
+                               if( v = dav.split( 'Windows NT 10' )[ 1 ] ){\r
+                                       switch( v.substr( 0, 2 ) ){\r
+                                               case '.0' : v = 10; break;\r
+                                               default : v = '?';\r
+                                       };\r
+                               } else\r
+                               if( v = dav.split( 'Windows NT ' )[ 1 ] ){\r
+                                       switch( v.substr( 0, 3 ) ){\r
+                                               case '6.3' : v = 8.1; break;\r
+                                               case '6.2' : v = 8; break;\r
+                                               case '6.1' : v = 7; break;\r
+                                               case '6.0' : v = 'Vista'; break;\r
+                                               case '5.2' : v = '2003|XP64'; break;\r
+                                               case '5.1' : v = v.indexOf( '5.1; SV1' ) ? 'XP' : 'XPSP2'; break;\r
+                                               case '5.0' : v = v.indexOf( '5.01' ) ? 2000 : '2kSP1'; break;\r
+                                               case '4.0' : v = 'NT'; break;\r
+                                               default : v = '?';\r
+                                       };                      \r
+                               } else\r
+                               if( v = dav.split( 'Windows ' )[ 1 ] ){\r
+                                       switch( v.substr( 0, 2 ) ){\r
+                                               case '98' : v = v.indexOf( '98; Win 9x 4.90' ) ? '98|98SE' : 'ME'; break;\r
+                                               case '95' : v = 95; break;\r
+                                               case '3.' : v = parseFloat( v ); break;\r
+                                               default : v = '?';\r
+                                       };      \r
+                               } else {\r
+                                       v = '?';\r
+                               };\r
+                               \r
+                               /**\r
+                                * 10, 8.1, 8, 7, Vista, 2003|XP64, XPSP2, XP, 2kSP1, 2000, ME, 98|98SE, 95, ?\r
+                                * @alias X.UA.Windows\r
+                                * @type {number|string}\r
+                                */                             \r
+                               X_UA[ 'Windows' ] = v;\r
+                               break;\r
                };\r
+\r
                // winRT\r
        } else\r
        if( sys.indexOf( 'Mac' ) + 1 ){\r
@@ -504,44 +543,37 @@ var X_UA = X[ 'UA' ] = {},
        \r
        if( ( dua.indexOf( 'Linux; U; Android ' ) !== -1 || dua.indexOf( 'Linux; Android ' ) !== -1 ) &&\r
                ( dua.indexOf( 'Chrome\/' ) === -1 || dua.indexOf( 'Version\/' ) !== -1 ) ){ // Chrome/ を含まない または Version/ を含む\r
-               /**\r
-                * Android 標準ブラウザ\r
-                * @alias X.UA.AndroidBrowser\r
-                * @type {number}\r
-                */\r
-               X_UA[ 'AndroidBrowser' ] = X_UA[ 'Android' ];\r
-               \r
-               v = X_UA[ 'AndroidMajor' ];\r
                \r
-               /**\r
-                * @alias X.UA.AndroidBrowser1\r
-                * @type {boolean}\r
-                */\r
-               X_UA[ 'AndroidBrowser1' ] = v === 1;\r
-               /**\r
-                * @alias X.UA.AndroidBrowser2\r
-                * @type {boolean}\r
-                */\r
-               X_UA[ 'AndroidBrowser2' ] = v === 2;\r
-               /**\r
-                * @alias X.UA.AndroidBrowser3\r
-                * @type {boolean}\r
-                */\r
-               X_UA[ 'AndroidBrowser3' ] = v === 3;\r
-               /**\r
-                * @alias X.UA.AndroidBrowser4\r
-                * @type {boolean}\r
-                */\r
-               X_UA[ 'AndroidBrowser4' ] = v === 4;\r
-               /**\r
-                * @alias X.UA.AndroidBrowser5\r
-                * @type {boolean}\r
-                */\r
-               X_UA[ 'AndroidBrowser5' ] = v === 5;\r
-               \r
-               console.log( '>> AndroidBrowser : ' + X_UA[ 'Android' ] );\r
+               /* if( window.chrome ){  // Android3.1 のAOSPブラウザで .chrome がいた、、、\r
+                       //X_UA[ 'Blink' ] = X_UA[ 'ChromeWK' ] = tv;\r
+               } else */\r
+               if( dua.indexOf( 'Version\/' ) === -1 && ( v = parseFloat( dua.split( 'Chrome\/' )[ 1 ] ) ) ){\r
+                       /**\r
+                        * Android 標準ブラウザ Chrome Webkit ラップブラウザ\r
+                        * @alias X.UA.ChromeWK\r
+                        * @type {number}\r
+                        */                     \r
+                       X_UA[ 'ChromeWK' ] = v;\r
+               } else\r
+               // http://uupaa.hatenablog.com/entry/2014/04/15/163346\r
+               // Chrome WebView は Android 4.4 の時点では WebGL や WebAudio など一部の機能が利用できません(can i use)。\r
+               // また UserAgent が書き換え可能なため、旧来のAOSPブラウザの UserAgent を偽装した形で配布されているケースがあります。\r
+               // http://caniuse.com/#compare=chrome+40,android+4.2-4.3,android+4.4,android+4.4.3-4.4.4,and_chr+45\r
+               // CustomElement の有無で判定\r
+               if( document[ 'registerElement' ] ){\r
+                       // UA が偽装された ChromeWK\r
+                       X_UA[ 'ChromeWK' ] = tv;\r
+                       alert( 'UA が偽装された Chrome Webkit' );\r
+               } else {\r
+                       /**\r
+                        * Android 標準ブラウザ AOSP\r
+                        * @alias X.UA.AOSP\r
+                        * @type {number}\r
+                        */\r
+                       X_UA[ 'AOSP' ] = X_UA[ 'Android' ];                     \r
+               };\r
                \r
-               i = parseFloat(dua.split('WebKit\/')[1]);\r
+               i = parseFloat( dua.split( 'WebKit\/' )[ 1 ] );\r
                /**\r
                 * @alias X.UA.AndroidWebkit\r
                 * @type {number}\r
@@ -549,26 +581,28 @@ var X_UA = X[ 'UA' ] = {},
                X_UA[ 'AndroidWebkit' ] = i;\r
                //alert( 'AudioSprite調査:Android標準ブラウザ Webkit Version ' + i );\r
                \r
-               if( window.chrome ){\r
-                       //X_UA[ 'Blink' ] = X_UA[ 'AndroidChromeBrowser' ] = tv;\r
-               } else\r
-               if( v = parseFloat(dua.split('Chrome\/')[1]) ){\r
-                       X_UA[ 'Chrome' ] = X_UA[ 'AndroidChromeBrowser' ] = v;\r
-               };\r
-               \r
-               //if( window[ 'webkitRequestFileSystem' ] ) alert( 'requestFileSystem' );\r
-               \r
-               //alert( 'html.style.WebkitAppearance:' + ( document.documentElement.style[ 'WebkitAppearance' ] === undefined ) + ' win.chrome:' + !!( window.chrome ) );\r
-\r
+               /*\r
+                * http://www.flexfirm.jp/blog/article/402\r
+                * Sブラウザ\r
+                * SC-04E、SC-01F、SC-02F、 SC-04F、SCL22、SCL23など\r
+                */\r
        } else\r
        \r
        // TODO Blink\r
-       if( window.chrome ){ // Android3.1 の標準ブラウザで .chrome がいた、、、\r
+       if( window.chrome ){\r
                /**\r
                 * @alias X.UA.Blink\r
                 * @type {number}\r
                 */\r
-               X_UA[ 'Blink' ] = tv;\r
+               X_UA[ 'Blink' ] = parseFloat( dua.split( 'Chrome/' )[ 1 ] );\r
+               \r
+               if( v = parseFloat( dua.split( 'OPR/' )[ 1 ] ) ){\r
+                       /**\r
+                        * @alias X.UA.BlinkOpera\r
+                        * @type {number}\r
+                        */\r
+                       X_UA[ 'BlinkOpera' ] = v;\r
+               };\r
                console.log( '>>Blink : ' + X_UA[ 'Blink' ] );\r
                \r
        } else\r