sniff.js 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. define("dojo/_base/sniff", ["./kernel", "../has"], function(dojo, has){
  2. // module:
  3. // dojo/sniff
  4. // summary:
  5. // This module populates the dojo browser version sniffing properties.
  6. if(!1){
  7. return has;
  8. }
  9. dojo.isBrowser = true,
  10. dojo._name = "browser";
  11. var hasAdd = has.add,
  12. n = navigator,
  13. dua = n.userAgent,
  14. dav = n.appVersion,
  15. tv = parseFloat(dav),
  16. isOpera,
  17. isAIR,
  18. isKhtml,
  19. isWebKit,
  20. isChrome,
  21. isMac,
  22. isSafari,
  23. isMozilla ,
  24. isMoz,
  25. isIE,
  26. isFF,
  27. isQuirks,
  28. isIos,
  29. isAndroid,
  30. isWii;
  31. /*=====
  32. dojo.isBrowser = {
  33. // example:
  34. // | if(dojo.isBrowser){ ... }
  35. };
  36. dojo.isFF = {
  37. // example:
  38. // | if(dojo.isFF > 1){ ... }
  39. };
  40. dojo.isIE = {
  41. // example:
  42. // | if(dojo.isIE > 6){
  43. // | // we are IE7
  44. // | }
  45. };
  46. dojo.isSafari = {
  47. // example:
  48. // | if(dojo.isSafari){ ... }
  49. // example:
  50. // Detect iPhone:
  51. // | if(dojo.isSafari && navigator.userAgent.indexOf("iPhone") != -1){
  52. // | // we are iPhone. Note, iPod touch reports "iPod" above and fails this test.
  53. // | }
  54. };
  55. dojo.mixin(dojo, {
  56. // isBrowser: Boolean
  57. // True if the client is a web-browser
  58. isBrowser: true,
  59. // isFF: Number | undefined
  60. // Version as a Number if client is FireFox. undefined otherwise. Corresponds to
  61. // major detected FireFox version (1.5, 2, 3, etc.)
  62. isFF: 2,
  63. // isIE: Number | undefined
  64. // Version as a Number if client is MSIE(PC). undefined otherwise. Corresponds to
  65. // major detected IE version (6, 7, 8, etc.)
  66. isIE: 6,
  67. // isKhtml: Number | undefined
  68. // Version as a Number if client is a KHTML browser. undefined otherwise. Corresponds to major
  69. // detected version.
  70. isKhtml: 0,
  71. // isWebKit: Number | undefined
  72. // Version as a Number if client is a WebKit-derived browser (Konqueror,
  73. // Safari, Chrome, etc.). undefined otherwise.
  74. isWebKit: 0,
  75. // isMozilla: Number | undefined
  76. // Version as a Number if client is a Mozilla-based browser (Firefox,
  77. // SeaMonkey). undefined otherwise. Corresponds to major detected version.
  78. isMozilla: 0,
  79. // isOpera: Number | undefined
  80. // Version as a Number if client is Opera. undefined otherwise. Corresponds to
  81. // major detected version.
  82. isOpera: 0,
  83. // isSafari: Number | undefined
  84. // Version as a Number if client is Safari or iPhone. undefined otherwise.
  85. isSafari: 0,
  86. // isChrome: Number | undefined
  87. // Version as a Number if client is Chrome browser. undefined otherwise.
  88. isChrome: 0,
  89. // isMac: Boolean
  90. // True if the client runs on Mac
  91. isMac: 0,
  92. // isIos: Boolean
  93. // True if client is iPhone, iPod, or iPad
  94. isIos: 0,
  95. // isAndroid: Number | undefined
  96. // Version as a Number if client is android browser. undefined otherwise.
  97. isAndroid: 0,
  98. // isWii: Boolean
  99. // True if client is Wii
  100. isWii: 0
  101. });
  102. =====*/
  103. // fill in the rendering support information in dojo.render.*
  104. if(dua.indexOf("AdobeAIR") >= 0){ isAIR = 1; }
  105. isKhtml = (dav.indexOf("Konqueror") >= 0) ? tv : 0;
  106. isWebKit = parseFloat(dua.split("WebKit/")[1]) || undefined;
  107. isChrome = parseFloat(dua.split("Chrome/")[1]) || undefined;
  108. isMac = dav.indexOf("Macintosh") >= 0;
  109. isIos = /iPhone|iPod|iPad/.test(dua);
  110. isAndroid = parseFloat(dua.split("Android ")[1]) || undefined;
  111. isWii = typeof opera != "undefined" && opera.wiiremote;
  112. isTrident = parseFloat(dav.split("Trident/")[1]) || undefined;
  113. // safari detection derived from:
  114. // http://developer.apple.com/internet/safari/faq.html#anchor2
  115. // http://developer.apple.com/internet/safari/uamatrix.html
  116. var index = Math.max(dav.indexOf("WebKit"), dav.indexOf("Safari"), 0);
  117. if(index && !isChrome){
  118. // try to grab the explicit Safari version first. If we don't get
  119. // one, look for less than 419.3 as the indication that we're on something
  120. // "Safari 2-ish".
  121. isSafari = parseFloat(dav.split("Version/")[1]);
  122. if(!isSafari || parseFloat(dav.substr(index + 7)) <= 419.3){
  123. isSafari = 2;
  124. }
  125. }
  126. if (!has("dojo-webkit")) {
  127. if(dua.indexOf("Opera") >= 0){
  128. isOpera = tv;
  129. // see http://dev.opera.com/articles/view/opera-ua-string-changes and http://www.useragentstring.com/pages/Opera/
  130. // 9.8 has both styles; <9.8, 9.9 only old style
  131. if(isOpera >= 9.8){
  132. isOpera = parseFloat(dua.split("Version/")[1]) || tv;
  133. }
  134. }
  135. if(dua.indexOf("Gecko") >= 0 && !isKhtml && !isWebKit && !isTrident){
  136. isMozilla = isMoz = tv;
  137. }
  138. if(isMoz){
  139. //We really need to get away from this. Consider a sane isGecko approach for the future.
  140. isFF = parseFloat(dua.split("Firefox/")[1] || dua.split("Minefield/")[1]) || undefined;
  141. }
  142. if(document.all && !isOpera){
  143. isIE = parseFloat(dav.split("MSIE ")[1]) || undefined;
  144. //In cases where the page has an HTTP header or META tag with
  145. //X-UA-Compatible, then it is in emulation mode.
  146. //Make sure isIE reflects the desired version.
  147. //document.documentMode of 5 means quirks mode.
  148. //Only switch the value if documentMode's major version
  149. //is different from isIE's major version.
  150. var mode = document.documentMode;
  151. if(mode && mode != 5 && Math.floor(isIE) != mode){
  152. isIE = mode;
  153. }
  154. }
  155. }
  156. isQuirks = document.compatMode == "BackCompat";
  157. hasAdd("opera", dojo.isOpera = isOpera);
  158. hasAdd("air", dojo.isAIR = isAIR);
  159. hasAdd("khtml", dojo.isKhtml = isKhtml);
  160. hasAdd("webkit", dojo.isWebKit = isWebKit);
  161. hasAdd("chrome", dojo.isChrome = isChrome);
  162. hasAdd("mac", dojo.isMac = isMac );
  163. hasAdd("safari", dojo.isSafari = isSafari);
  164. hasAdd("mozilla", dojo.isMozilla = dojo.isMoz = isMozilla );
  165. hasAdd("ie", dojo.isIE = isIE );
  166. hasAdd("ff", dojo.isFF = isFF);
  167. hasAdd("quirks", dojo.isQuirks = isQuirks);
  168. hasAdd("ios", dojo.isIos = isIos);
  169. hasAdd("android", dojo.isAndroid = isAndroid);
  170. hasAdd("trident", dojo.isTrident = isTrident);
  171. dojo.locale = dojo.locale || (isIE ? n.userLanguage : n.language).toLowerCase();
  172. return has;
  173. });