browser.js 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. /**
  2. * DevExtreme (core/utils/browser.js)
  3. * Version: 19.1.16
  4. * Build date: Tue Oct 18 2022
  5. *
  6. * Copyright (c) 2012 - 2022 Developer Express Inc. ALL RIGHTS RESERVED
  7. * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
  8. */
  9. "use strict";
  10. var extend = require("./extend").extend;
  11. var windowUtils = require("./window");
  12. var navigator = windowUtils.getNavigator();
  13. var webkitRegExp = /(webkit)[ \/]([\w.]+)/;
  14. var ieRegExp = /(msie) (\d{1,2}\.\d)/;
  15. var ie11RegExp = /(trident).*rv:(\d{1,2}\.\d)/;
  16. var msEdge = /(edge)\/((\d+)?[\w.]+)/;
  17. var mozillaRegExp = /(mozilla)(?:.*? rv:([\w.]+))/;
  18. var browserFromUA = function(ua) {
  19. ua = ua.toLowerCase();
  20. var result = {};
  21. var matches = ieRegExp.exec(ua) || ie11RegExp.exec(ua) || msEdge.exec(ua) || ua.indexOf("compatible") < 0 && mozillaRegExp.exec(ua) || webkitRegExp.exec(ua) || [];
  22. var browserName = matches[1];
  23. var browserVersion = matches[2];
  24. if ("webkit" === browserName) {
  25. result.webkit = true;
  26. if (ua.indexOf("chrome") >= 0 || ua.indexOf("crios") >= 0) {
  27. browserName = "chrome";
  28. browserVersion = /(?:chrome|crios)\/(\d+\.\d+)/.exec(ua);
  29. browserVersion = browserVersion && browserVersion[1]
  30. } else {
  31. if (ua.indexOf("fxios") >= 0) {
  32. browserName = "mozilla";
  33. browserVersion = /fxios\/(\d+\.\d+)/.exec(ua);
  34. browserVersion = browserVersion && browserVersion[1]
  35. } else {
  36. if (ua.indexOf("safari") >= 0 && /version|phantomjs/.test(ua)) {
  37. browserName = "safari";
  38. browserVersion = /(?:version|phantomjs)\/([0-9.]+)/.exec(ua);
  39. browserVersion = browserVersion && browserVersion[1]
  40. } else {
  41. browserName = "unknown";
  42. browserVersion = /applewebkit\/([0-9.]+)/.exec(ua);
  43. browserVersion = browserVersion && browserVersion[1]
  44. }
  45. }
  46. }
  47. }
  48. if ("trident" === browserName || "edge" === browserName) {
  49. browserName = "msie"
  50. }
  51. if (browserName) {
  52. result[browserName] = true;
  53. result.version = browserVersion
  54. }
  55. return result
  56. };
  57. module.exports = extend({
  58. _fromUA: browserFromUA
  59. }, browserFromUA(navigator.userAgent));