X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=0.6.x%2Fjs%2F01_core%2F02_XUA.js;h=426b486147c93e7d02c99ce8f51446adc056c76d;hb=a3d03e96ad8c0392ef683eb6c64421e094b96958;hp=3ce9532e5db9a192a1e6ca47ed7c6edd57ac80a8;hpb=e28511741c97176b8ffe67bb1ea0660da37f754b;p=pettanr%2FclientJs.git diff --git a/0.6.x/js/01_core/02_XUA.js b/0.6.x/js/01_core/02_XUA.js index 3ce9532..426b486 100644 --- a/0.6.x/js/01_core/02_XUA.js +++ b/0.6.x/js/01_core/02_XUA.js @@ -136,26 +136,65 @@ var X_UA = X[ 'UA' ] = {}, X_UA[ 'webOS' ] = true; // webOS } else if( sys.indexOf( 'Win' ) + 1 ){ - console.log( 'Win' ); - /** - * @alias X.UA.Windows - * @type {boolean} - */ - X_UA[ 'Windows' ] = true; + switch( sys ){ + case 'WinCE' : + /** + * @alias X.UA.WinCE + * @type {boolean} + */ + X_UA[ sys ] = true; + break; case 'Win16' : case 'Win32' : case 'Win64' : - case 'WinCE' : /** * @alias X.UA.Win16 * @alias X.UA.Win32 * @alias X.UA.Win64 - * @alias X.UA.WinCE * @type {boolean} */ X_UA[ sys ] = true; + + if( v = dav.split( 'Windows NT 10' )[ 1 ] ){ + switch( v.substr( 0, 2 ) ){ + case '.0' : v = 10; break; + default : v = '?'; + }; + } else + if( v = dav.split( 'Windows NT ' )[ 1 ] ){ + switch( v.substr( 0, 3 ) ){ + case '6.3' : v = 8.1; break; + case '6.2' : v = 8; break; + case '6.1' : v = 7; break; + case '6.0' : v = 'Vista'; break; + case '5.2' : v = '2003|XP64'; break; + case '5.1' : v = v.indexOf( '5.1; SV1' ) ? 'XP' : 'XPSP2'; break; + case '5.0' : v = v.indexOf( '5.01' ) ? 2000 : '2kSP1'; break; + case '4.0' : v = 'NT'; break; + default : v = '?'; + }; + } else + if( v = dav.split( 'Windows ' )[ 1 ] ){ + switch( v.substr( 0, 2 ) ){ + case '98' : v = v.indexOf( '98; Win 9x 4.90' ) ? '98|98SE' : 'ME'; break; + case '95' : v = 95; break; + case '3.' : v = parseFloat( v ); break; + default : v = '?'; + }; + } else { + v = '?'; + }; + + /** + * 10, 8.1, 8, 7, Vista, 2003|XP64, XPSP2, XP, 2kSP1, 2000, ME, 98|98SE, 95, ? + * @alias X.UA.Windows + * @type {number|string} + */ + X_UA[ 'Windows' ] = v; + break; }; + // winRT } else if( sys.indexOf( 'Mac' ) + 1 ){ @@ -193,7 +232,23 @@ var X_UA = X[ 'UA' ] = {}, */ X_UA[ 'Linux' ] = true; - if( ( i = dua.indexOf( 'Android' ) ) !== -1 ){ + if( dua.indexOf( 'Android ' ) !== -1 ){ + v = dua.split( 'Android ' )[ 1 ].split( '.' ); + /** + * @alias X.UA.AndroidMajor + * @type {number} + */ + X_UA[ 'AndroidMajor' ] = parseFloat( v[ 0 ] ) || 0; + /** + * @alias X.UA.AndroidMinor + * @type {number} + */ + X_UA[ 'AndroidMinor' ] = parseFloat( v[ 1 ] ) || 0; + /** + * @alias X.UA.AndroidPatch + * @type {number} + */ + X_UA[ 'AndroidPatch' ] = parseFloat( v[ 2 ] ) || 0; /** * Firefox で Version が取れない! * http://bizmakoto.jp/bizid/articles/1207/31/news004.html @@ -205,7 +260,7 @@ var X_UA = X[ 'UA' ] = {}, * @alias X.UA.Android * @type {number} */ - X_UA[ 'Android' ] = parseFloat( dua.substr( i + 8 ) ) || 0.1; + X_UA[ 'Android' ] = X_UA[ 'AndroidMajor' ] + X_UA[ 'AndroidMinor' ] / 10; console.log( '>> Android : ' + X_UA[ 'Android' ] ); }; }; @@ -486,13 +541,68 @@ var X_UA = X[ 'UA' ] = {}, console.log( '>> Gecko : ' + X_UA[ 'Gecko' ] ); }; + if( ( dua.indexOf( 'Linux; U; Android ' ) !== -1 || dua.indexOf( 'Linux; Android ' ) !== -1 ) && + ( dua.indexOf( 'Chrome\/' ) === -1 || dua.indexOf( 'Version\/' ) !== -1 ) ){ // Chrome/ を含まない または Version/ を含む + + /* if( window.chrome ){ // Android3.1 のAOSPブラウザで .chrome がいた、、、 + //X_UA[ 'Blink' ] = X_UA[ 'ChromeWK' ] = tv; + } else */ + if( dua.indexOf( 'Version\/' ) === -1 && ( v = parseFloat( dua.split( 'Chrome\/' )[ 1 ] ) ) ){ + /** + * Android 標準ブラウザ Chrome Webkit ラップブラウザ + * @alias X.UA.ChromeWK + * @type {number} + */ + X_UA[ 'ChromeWK' ] = v; + } else + // http://uupaa.hatenablog.com/entry/2014/04/15/163346 + // Chrome WebView は Android 4.4 の時点では WebGL や WebAudio など一部の機能が利用できません(can i use)。 + // また UserAgent が書き換え可能なため、旧来のAOSPブラウザの UserAgent を偽装した形で配布されているケースがあります。 + // http://caniuse.com/#compare=chrome+40,android+4.2-4.3,android+4.4,android+4.4.3-4.4.4,and_chr+45 + // CustomElement の有無で判定 + if( document[ 'registerElement' ] ){ + // UA が偽装された ChromeWK + X_UA[ 'ChromeWK' ] = tv; + alert( 'UA が偽装された Chrome Webkit' ); + } else { + /** + * Android 標準ブラウザ AOSP + * @alias X.UA.AOSP + * @type {number} + */ + X_UA[ 'AOSP' ] = X_UA[ 'Android' ]; + }; + + i = parseFloat( dua.split( 'WebKit\/' )[ 1 ] ); + /** + * @alias X.UA.AndroidWebkit + * @type {number} + */ + X_UA[ 'AndroidWebkit' ] = i; + //alert( 'AudioSprite調査:Android標準ブラウザ Webkit Version ' + i ); + + /* + * http://www.flexfirm.jp/blog/article/402 + * Sブラウザ + * SC-04E、SC-01F、SC-02F、 SC-04F、SCL22、SCL23など + */ + } else + // TODO Blink if( window.chrome ){ /** * @alias X.UA.Blink * @type {number} */ - X_UA[ 'Blink' ] = tv; + X_UA[ 'Blink' ] = parseFloat( dua.split( 'Chrome/' )[ 1 ] ); + + if( v = parseFloat( dua.split( 'OPR/' )[ 1 ] ) ){ + /** + * @alias X.UA.BlinkOpera + * @type {number} + */ + X_UA[ 'BlinkOpera' ] = v; + }; console.log( '>>Blink : ' + X_UA[ 'Blink' ] ); } else @@ -505,49 +615,7 @@ var X_UA = X[ 'UA' ] = {}, console.log( '>>Khtml : ' + X_UA[ 'Khtml' ] ); } else - if( ( i = dua.indexOf( 'Android ' ) ) !== -1 ){ - /** - * Android 標準ブラウザ - * @alias X.UA.AndroidBrowser - * @type {number} - */ - X_UA[ 'AndroidBrowser' ] = i = parseFloat( dua.substr( i + 8 ) ) || 0.1; - /** - * @alias X.UA.AndroidBrowser1 - * @type {boolean} - */ - X_UA[ 'AndroidBrowser1' ] = 1 <= i && i < 2; - /** - * @alias X.UA.AndroidBrowser2 - * @type {boolean} - */ - X_UA[ 'AndroidBrowser2' ] = 2 <= i && i < 3; - /** - * @alias X.UA.AndroidBrowser3 - * @type {boolean} - */ - X_UA[ 'AndroidBrowser3' ] = 3 <= i && i < 4; - /** - * @alias X.UA.AndroidBrowser4 - * @type {boolean} - */ - X_UA[ 'AndroidBrowser4' ] = 4 <= i && i < 5; - /** - * @alias X.UA.AndroidBrowser5 - * @type {boolean} - */ - X_UA[ 'AndroidBrowser5' ] = 5 <= i && i < 6; - console.log( '>> AndroidBrowser : ' + X_UA[ 'Android' ] ); - - i = parseFloat(dua.split('WebKit\/')[1]); - /** - * @alias X.UA.AndroidWebkit - * @type {number} - */ - X_UA[ 'AndroidWebkit' ] = i; - //alert( 'AudioSprite調査:Android標準ブラウザ Webkit Version ' + i ); - - } else + if( i = parseFloat(dua.split('WebKit\/')[1]) ){ /** * @alias X.UA.WebKit