browser.js 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. /**
  2. * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
  3. * For licensing, see LICENSE.md.
  4. */
  5. /* global navigator */
  6. /**
  7. * Returns the name of the browser in which code is executed based on `window.navigator` object.
  8. *
  9. * @returns {String|null} Lowercase browser name or null if non-standard browser is used.
  10. */
  11. export function getBrowserName() {
  12. const browsers = detectBrowsers( navigator );
  13. const browser = Object.keys( browsers ).filter( browserName => !!browsers[ browserName ] );
  14. return browser.length ? browser[ 0 ] : null;
  15. }
  16. // Checks if current browser is one of the predefined ones (Chrome, Edge, Firefox, IE, Safari).
  17. //
  18. // @param {Navigator} navigator Browser `window.navigator` object on which detection is based.
  19. // @returns {{chrome: Boolean, edge: Boolean, firefox: Boolean, ie: Boolean, safari: Boolean}}
  20. function detectBrowsers( navigator ) {
  21. const agent = navigator.userAgent.toLowerCase();
  22. const edge = agent.match( /edge[ /](\d+.?\d*)/ );
  23. const trident = agent.indexOf( 'trident/' ) > -1;
  24. const ie = !!( edge || trident );
  25. const webkit = !ie && ( agent.indexOf( ' applewebkit/' ) > -1 );
  26. const gecko = navigator.product === 'Gecko' && !webkit && !ie;
  27. const chrome = webkit && agent.indexOf( 'chrome' ) > -1;
  28. return {
  29. chrome,
  30. edge: !!edge,
  31. firefox: gecko,
  32. ie,
  33. safari: webkit && !chrome,
  34. };
  35. }