X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;ds=inline;f=0.6.x%2Fjs%2F01_core%2F02_XUA.js;h=8302b9762d0bdde55acf2e72c6ca6b40f1ad5f80;hb=ecfded871abcf085bbc2b862352232190b87fd27;hp=52da87eae2a801f56788feff09bfd18cdeeea387;hpb=f01f21c6d473692d016cb2b286a61d55380be3b3;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 52da87e..8302b97 100644 --- a/0.6.x/js/01_core/02_XUA.js +++ b/0.6.x/js/01_core/02_XUA.js @@ -4,7 +4,7 @@ // ------------------------------------------------------------------------- // /** - * UserAgent の関する定数を保持する。 + * UserAgent に関する定数を保持する。 * @namespace X.UA * @alias X.UA * @type {object} @@ -70,15 +70,17 @@ var X_UA = X[ 'UA' ] = {}, * @type {boolean} */ X_UA[ 'iPhone_4s' ] = true; + + if( i ){ + /** + * iPhone3GS以下 + * @alias X.UA.iPhone_3GS + * @type {boolean} + */ + X_UA[ 'iPhone_3GS' ] = true; + }; }; - if( v && i ){ - /** - * iPhone3GS以下 - * @alias X.UA.iPhone_3GS - * @type {boolean} - */ - X_UA[ 'iPhone_3GS' ] = true; - }; + //alert( 'iPhone ' + ( X_UA[ 'iPhone_3GS' ] ? '3GS以下' : X_UA[ 'iPhone_4s' ] ? '4s以下' : '5以上' ) ); }; if( sys === 'iPad' ){ @@ -102,14 +104,7 @@ var X_UA = X[ 'UA' ] = {}, * @type {boolean} */ X_UA[ 'iPod' ] = true; - if( v && i ){ - /** - * iPod3以下 - * @alias X.UA.iPod_3 - * @type {boolean} - */ - X_UA[ 'iPod_3' ] = true; - }; + if( v ){ /** * iPod4以下 @@ -117,6 +112,15 @@ var X_UA = X[ 'UA' ] = {}, * @type {boolean} */ X_UA[ 'iPod_4' ] = true; + + if( i ){ + /** + * iPod3以下 + * @alias X.UA.iPod_3 + * @type {boolean} + */ + X_UA[ 'iPod_3' ] = true; + }; }; //alert( 'iPod touch ' + ( X_UA[ 'iPod_3' ] ? '3以下' : X_UA[ 'iPod_4' ] ? '4以下' : '5以上' ) ); }; @@ -132,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 ){ @@ -189,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 @@ -201,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' ] ); }; }; @@ -278,19 +337,20 @@ var X_UA = X[ 'UA' ] = {}, * @type {number} */ X_UA[ 'Trident' ] = parseFloat(dav.split('Trident/')[1]) || 0; + + tridentToVer = X_UA[ 'Trident' ] ? ( X_UA[ 'Trident' ] + 4 | 0 ) : X_UA[ '_IE' ]; /** - * documentモードを考慮したIEのバージョン - * @alias X.UA.IE + * IE10 以上の互換モードを使用している場合、そのバージョン + * @alias X.UA.IEHost * @type {number} */ - X_UA[ 'IE' ] = v = document.documentMode || X_UA[ '_IE' ]; - tridentToVer = X_UA[ 'Trident' ] ? ( X_UA[ 'Trident' ] + 4 | 0 ) : X_UA[ '_IE' ]; + if( tridentToVer !== X_UA[ '_IE' ] ) X_UA[ 'IEHost' ] = tridentToVer; /** - * IE10 以上の互換モードを使用している場合、そのバージョン - * @alias X.UA.IECompat + * documentモードを考慮したIEのバージョン + * @alias X.UA.IE * @type {number} */ - if( v = tridentToVer !== X_UA[ '_IE' ] && tridentToVer ) X_UA[ 'IECompat' ] = v; + X_UA[ 'IE' ] = v = document.documentMode || tridentToVer; /** * @alias X.UA.IE4 * @type {boolean} @@ -357,7 +417,7 @@ var X_UA = X[ 'UA' ] = {}, */ if( dua.toLowerCase().indexOf( 'windows phone' ) !== -1 || 0 < dav.indexOf( 'ZuneWP' ) ) X_UA[ 'WinPhone' ] = true; // ZuneWP は IEM のデスクトップモードで登場する - console.log( '>> IE : ' + v + ' ActiveX : ' + X_UA[ 'ActiveX' ] ); + console.log( '>> IE : ' + v + ' ActiveX : ' + X_UA[ 'ActiveX' ] + ' IEHost : ' + X_UA[ 'IEHost' ] ); // TODO XBox360, XBox1, Modern or Desktop, Standalone return; }; @@ -481,68 +541,86 @@ var X_UA = X[ 'UA' ] = {}, console.log( '>> Gecko : ' + X_UA[ 'Gecko' ] ); }; - // TODO Blink - if( window.chrome ){ - /** - * @alias X.UA.Blink - * @type {number} - */ - X_UA[ 'Blink' ] = tv; - console.log( '>>Blink : ' + X_UA[ 'Blink' ] ); - - } else - if( dav.indexOf( 'Konqueror' ) !== -1 ){ - /** - * @alias X.UA.Khtml - * @type {number} - */ - X_UA[ 'Khtml' ] = tv; - console.log( '>>Khtml : ' + X_UA[ 'Khtml' ] ); - - } else - if( ( i = dua.indexOf( 'Android ' ) ) !== -1 ){ + if( ( dua.indexOf( 'Linux; U; Android ' ) !== -1 || dua.indexOf( 'Linux; Android ' ) !== -1 ) && + ( dua.indexOf( 'Chrome\/' ) === -1 || dua.indexOf( 'Version\/' ) !== -1 ) ){ // Chrome/ を含まない または Version/ を含む /** * Android 標準ブラウザ * @alias X.UA.AndroidBrowser * @type {number} */ - X_UA[ 'AndroidBrowser' ] = i = parseFloat( dua.substr( i + 8 ) ) || 0.1; + X_UA[ 'AndroidBrowser' ] = X_UA[ 'Android' ]; + + v = X_UA[ 'AndroidMajor' ]; + /** * @alias X.UA.AndroidBrowser1 * @type {boolean} */ - X_UA[ 'AndroidBrowser1' ] = 1 <= i && i < 2; + X_UA[ 'AndroidBrowser1' ] = v === 1; /** * @alias X.UA.AndroidBrowser2 * @type {boolean} */ - X_UA[ 'AndroidBrowser2' ] = 2 <= i && i < 3; + X_UA[ 'AndroidBrowser2' ] = v === 2; /** * @alias X.UA.AndroidBrowser3 * @type {boolean} */ - X_UA[ 'AndroidBrowser3' ] = 3 <= i && i < 4; + X_UA[ 'AndroidBrowser3' ] = v === 3; /** * @alias X.UA.AndroidBrowser4 * @type {boolean} */ - X_UA[ 'AndroidBrowser4' ] = 4 <= i && i < 5; + X_UA[ 'AndroidBrowser4' ] = v === 4; /** * @alias X.UA.AndroidBrowser5 * @type {boolean} */ - X_UA[ 'AndroidBrowser5' ] = 5 <= i && i < 6; + X_UA[ 'AndroidBrowser5' ] = v === 5; + console.log( '>> AndroidBrowser : ' + X_UA[ 'Android' ] ); i = parseFloat(dua.split('WebKit\/')[1]); /** - * @alias X.UA.AndroidBrowserWebkit + * @alias X.UA.AndroidWebkit * @type {number} */ - X_UA[ 'AndroidBrowserWebkit' ] = i; - alert( 'AudioSprite調査:Android標準ブラウザ Webkit Version ' + i ); + X_UA[ 'AndroidWebkit' ] = i; + //alert( 'AudioSprite調査:Android標準ブラウザ Webkit Version ' + i ); + if( window.chrome ){ + //X_UA[ 'Blink' ] = X_UA[ 'AndroidChromeBrowser' ] = tv; + } else + if( v = parseFloat(dua.split('Chrome\/')[1]) ){ + X_UA[ 'Chrome' ] = X_UA[ 'AndroidChromeBrowser' ] = v; + }; + + //if( window[ 'webkitRequestFileSystem' ] ) alert( 'requestFileSystem' ); + + //alert( 'html.style.WebkitAppearance:' + ( document.documentElement.style[ 'WebkitAppearance' ] === undefined ) + ' win.chrome:' + !!( window.chrome ) ); + } else + + // TODO Blink + if( window.chrome ){ // Android3.1 の標準ブラウザで .chrome がいた、、、 + /** + * @alias X.UA.Blink + * @type {number} + */ + X_UA[ 'Blink' ] = tv; + console.log( '>>Blink : ' + X_UA[ 'Blink' ] ); + + } else + if( dav.indexOf( 'Konqueror' ) !== -1 ){ + /** + * @alias X.UA.Khtml + * @type {number} + */ + X_UA[ 'Khtml' ] = tv; + console.log( '>>Khtml : ' + X_UA[ 'Khtml' ] ); + + } else + if( i = parseFloat(dua.split('WebKit\/')[1]) ){ /** * @alias X.UA.WebKit @@ -677,11 +755,6 @@ if( document.getElementById ){ } else { X_UA_EVENT.DOM0 = true; }; -} else -if( document.layers ){ - -} else { - }; if( navigator.msPointerEnabled || navigator.pointerEnabled ) X_UA_HID.POINTER = true; @@ -714,7 +787,7 @@ if( X_UA[ 'IE' ] < 7 ){ // error @ NN7.2 X_UA[ 'ieExeComError' ] = eval( 'var a=1;try{document.execCommand&&document.execCommand("BackgroundImageCache",!1,!0)}catch(e){a=0}!a' ); })(); - X_UA[ 'ieExeComError' ] && alert( 'document.execCommand error!' ); + //X_UA[ 'ieExeComError' ] && alert( 'document.execCommand error!' ); }; /*