OSDN Git Service

Version 0.6.44, fixed X.Class for safari1.
[pettanr/clientJs.git] / 0.6.x / js / core / 01_XUa.js
1 \r
2 /*\r
3  * UA\r
4  */\r
5 X.UA = (function( n, undefined ){\r
6         var acme = {},\r
7                 dua  = n.userAgent,\r
8                 dav  = n.appVersion,\r
9                 tv   = parseFloat(dav),\r
10                 i, j, v;\r
11         if( window.opera ){\r
12                 i = dua.indexOf( 'Opera' ); // Opera/\r
13                 j = dua.indexOf( 'Version/' );\r
14                 acme.Opera = Math.max(\r
15                         i !== -1 ? parseFloat( dua.substr( i + 6 ) ) : 0,\r
16                         j !== -1 ? parseFloat( dua.substr( j + 8 ) ) : 0,\r
17                         tv );\r
18                 acme.OperaMini   = 0 < dua.indexOf("Opera Mini");\r
19                 acme.OperaMobile = 0 < dua.indexOf("Opera Mobi");\r
20                 acme.OperaTablet = 0 < dua.indexOf("Opera Tablet");\r
21                 return acme;\r
22         };\r
23         \r
24         // Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko\r
25         if( document.all ){\r
26                 acme.ActiveX = !!window[ 'ActiveXObject' ];\r
27                 acme.IE = parseFloat(dav.split("MSIE ")[1]) || parseFloat(dua.split("rv:")[1]) || 0;\r
28                 acme.MacIE = !!dav.indexOf( 'Mac_PowerPC' ) || !!dav.indexOf( 'Mac_PPC' ) || !!dav.indexOf( 'Mac_68K' );\r
29                 acme.IEMobile = dua.toLowerCase().indexOf( 'iemobile' ) !== -1 ||\r
30                                                 dua.toLowerCase().indexOf( 'windows phone' ) !== -1;            \r
31                 return acme;\r
32         };\r
33         \r
34         if( ( i = dua.indexOf( 'NetFront\/' ) !== -1 ) ){\r
35                 acme.NetFront = parseFloat( dua.substr( i + 9 ) ) || 0;\r
36                 return acme;\r
37         };\r
38         \r
39         if( 0 < dua.indexOf( 'Gecko\/' ) && ( i = dua.indexOf( 'rv:' ) ) ){\r
40                 v = dua.substr( i + 3 ).split( '.' );\r
41                 acme.Gecko = parseFloat( v[ 0 ] ) || 0 +\r
42                         ( parseFloat( v[ 1 ] ) || 0 ) / 10 +\r
43                         ( parseFloat( v[ 2 ] ) || 0 ) / 100;\r
44                 \r
45                 //Fennec\r
46                 //Firefox\r
47                 //Netscape\r
48         };\r
49         \r
50         // Blink\r
51         // iCab\r
52         acme.Khtml  = ( dav.indexOf("Konqueror") >= 0 ) ? tv : undefined;\r
53         acme.WebKit = parseFloat(dua.split("WebKit\/")[1]) || undefined;\r
54         acme.Chrome = parseFloat(dua.split("Chrome\/")[1]) || undefined;\r
55         i = Math.max(dav.indexOf("WebKit"), dav.indexOf("Safari"), 0);\r
56         if( i && !acme.Chrome ){\r
57                 acme.Safari = parseFloat( dav.split("Version/")[1] );\r
58                 i = parseFloat(dav.substr( i + 7 ));\r
59                 if( !acme.Safari && i < 100 ){\r
60                         acme.Safari = 1;\r
61                 };\r
62                 if( !acme.Safari && i < 125 ){\r
63                         acme.Safari = 1.1;\r
64                 };\r
65                 if( !acme.Safari && i < 312 ){\r
66                         acme.Safari = 1.2;\r
67                 };\r
68                 if( !acme.Safari && i < 412 ){\r
69                         acme.Safari = 1.3;\r
70                 };\r
71                 if( !acme.Safari && i <= 419.3 ){\r
72                         acme.Safari = 2;\r
73                 };\r
74         };\r
75         \r
76         acme.Android  = dua.toLowerCase().indexOf( 'android' ) !== -1;  \r
77         \r
78         acme.iOS      = dua.toLowerCase().indexOf( 'iphone' ) !== -1 ||\r
79                                         dua.toLowerCase().indexOf( 'ipad' ) !== -1 ||\r
80                                         dua.toLowerCase().indexOf( 'ipod' ) !== -1;\r
81         \r
82         acme.TouchPad = dua.toLowerCase().indexOf( 'hp-tablet' ) !== -1; // webOS\r
83         \r
84         //http://www.useragentstring.com/pages/Iris/\r
85         acme.Iris     = dua.toLowerCase().indexOf( 'iris' ) !== -1;\r
86         \r
87         acme.EInk =\r
88                 // Kobo Mozilla/5.0 (Linux; U; Android 2.0; en-us;) AppleWebKit/533.1 (KHTML, like Gecko) Verson/4.0 Mobile Safari/533.1 (Kobo Touch)\r
89                 dua.indexOf( 'Kobo' ) !== -1 ||\r
90                 // Kindle paperwhite Mozilla/5.0 (X11; U; Linux armv7l like Android; en-us) AppleWebKit/531.2+ (KHTML, like Gecko) Version/5.0 Safari/533.2+ Kindle/3.0+\r
91                 dua.indexOf( 'Kindle' ) !== -1 ||\r
92                 // Sony Reader Mozilla/5.0 (Linux; U; ja-jp; EBRD1101; EXT) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\r
93                 dua.indexOf( 'EBRD' ) !== -1;   \r
94         \r
95         return acme;\r
96 })( navigator );\r
97 /* ie5 でerror...\r
98 X.inObject = X.UA.IE && X.UA.IE < 5 ? // TODO JScript で判定\r
99         (function( name, obj ){\r
100                 var p;\r
101                 if( obj[ name ] ) return true;\r
102                 name += ''; // 数値も許可\r
103                 for( p in obj ){\r
104                         if( p === name ) return true;\r
105                 };\r
106                 return false;\r
107         }) :\r
108         new Function( 'a,b', 'return a in b' ); \r
109 \r
110 // Safari 3.1 未満は開発コンソールがない!\r
111 // http://shimax.cocolog-nifty.com/search/2006/09/safarijavascrip_c54d.html\r
112 \r
113 if( X.UA.Safari && X.UA.WebKit < 525.13 ){      \r
114         window.onerror = function( x, y, z ){\r
115                 var n = String.fromCharCode( 10 );\r
116             alert('window.onerrorによるエラーの捕捉:' + n + x + n + y + 'の' + z + '行目付近です。');\r
117             return true;\r
118         };\r
119 };\r
120 \r
121 if( X.UA.IE && X.UA.IE < 7 ){ // error @ NN7.2\r
122         // bonus: hotfix for IE6 SP1 (bug KB823727)\r
123         document.execCommand && document.execCommand( 'BackgroundImageCache', false, true );\r
124 };*/\r