OSDN Git Service

Version 0.6.42, bugfix for tree update event.
[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.IEMobile = dua.toLowerCase().indexOf( 'iemobile' ) !== -1 ||\r
29                                                 dua.toLowerCase().indexOf( 'windows phone' ) !== -1;            \r
30                 return acme;\r
31         };\r
32         \r
33         if( i = dua.indexOf( 'NetFront\/' ) ){\r
34                 acme.NetFront = parseFloat( dua.substr( i + 9 ) ) || 0;\r
35                 return acme;\r
36         };\r
37         \r
38         if( 0 < dua.indexOf( 'Gecko\/' ) && ( i = dua.indexOf( 'rv:' ) ) ){\r
39                 v = dua.substr( i + 3 ).split( '.' );\r
40                 acme.Gecko = parseFloat( v[ 0 ] ) || 0 +\r
41                         ( parseFloat( v[ 1 ] ) || 0 ) / 10 +\r
42                         ( parseFloat( v[ 2 ] ) || 0 ) / 100;\r
43                 \r
44                 //Fennec\r
45                 //Firefox\r
46                 //Netscape\r
47         };\r
48         \r
49         // Blink\r
50         // iCab\r
51         acme.Khtml  = ( dav.indexOf("Konqueror") >= 0 ) ? tv : undefined;\r
52         acme.WebKit = parseFloat(dua.split("WebKit\/")[1]) || undefined;\r
53         acme.Chrome = parseFloat(dua.split("Chrome\/")[1]) || undefined;\r
54         // replace( reg, ) don't work for Sigmarion2 pocketIE\r
55         acme.Gecko  = eval( '(navigator.userAgent.indexOf("Gecko\/") >= 0) ? parseFloat(navigator.userAgent.split("rv:")[1].replace( /^(\d*\.\d*)\.(\d*)/, "$1$2" )) : undefined' );\r
56         i = Math.max(dav.indexOf("WebKit"), dav.indexOf("Safari"), 0);\r
57         if( i && !acme.Chrome ){\r
58                 acme.Safari = parseFloat( dav.split("Version/")[1] );\r
59                 i = parseFloat(dav.substr( i + 7 ));\r
60                 if( !acme.Safari && i < 100 ){\r
61                         acme.Safari = 1;\r
62                 };\r
63                 if( !acme.Safari && i < 125 ){\r
64                         acme.Safari = 1.1;\r
65                 };\r
66                 if( !acme.Safari && i < 312 ){\r
67                         acme.Safari = 1.2;\r
68                 };\r
69                 if( !acme.Safari && i < 412 ){\r
70                         acme.Safari = 1.3;\r
71                 };\r
72                 if( !acme.Safari && i <= 419.3 ){\r
73                         acme.Safari = 2;\r
74                 };\r
75         };\r
76         \r
77         acme.Android  = dua.toLowerCase().indexOf( 'android' ) !== -1;  \r
78         \r
79         acme.iOS      = dua.toLowerCase().indexOf( 'iphone' ) !== -1 ||\r
80                                         dua.toLowerCase().indexOf( 'ipad' ) !== -1 ||\r
81                                         dua.toLowerCase().indexOf( 'ipod' ) !== -1;\r
82         \r
83         acme.TouchPad = dua.toLowerCase().indexOf( 'hp-tablet' ) !== -1; // webOS\r
84         \r
85         //http://www.useragentstring.com/pages/Iris/\r
86         acme.Iris     = dua.toLowerCase().indexOf( 'iris' ) !== -1;\r
87         \r
88         acme.EInk =\r
89                 // 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
90                 dua.indexOf( 'Kobo' ) !== -1 ||\r
91                 // 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
92                 dua.indexOf( 'Kindle' ) !== -1 ||\r
93                 // 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
94                 dua.indexOf( 'EBRD' ) !== -1;   \r
95         \r
96         return acme;\r
97 })( navigator );\r
98 \r
99 X.inObject = X.UA.IE && X.UA.IE < 5 ?\r
100         (function( name, obj ){\r
101                 var p;\r
102                 if( obj[ name ] ) return true;\r
103                 name += ''; // 数値も許可\r
104                 for( p in obj ){\r
105                         if( p === name ) return true;\r
106                 };\r
107                 return false;\r
108         }) :\r
109         new Function( 'a,b', 'return a in b' );\r
110         \r
111 \r
112 // Safari 3.1 未満は開発コンソールがない!\r
113 // http://shimax.cocolog-nifty.com/search/2006/09/safarijavascrip_c54d.html\r
114 if( X.UA.Safari && X.UA.WebKit < 525.13 ){      \r
115         window.onerror = function( x, y, z ){\r
116                 var n = String.fromCharCode( 10 );\r
117             alert('window.onerrorによるエラーの捕捉:' + n + x + n + y + 'の' + z + '行目付近です。');\r
118             return true;\r
119         };\r
120 };\r
121 \r
122 if( X.UA.IE && X.UA.IE < 7 ){ // error @ NN7.2\r
123         // bonus: hotfix for IE6 SP1 (bug KB823727)\r
124         document.execCommand && document.execCommand( 'BackgroundImageCache', false, true );\r
125 };\r