browser.ts 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. // 解析版本号为数组,便于比较
  2. function parseVersion(versionString) {
  3. return versionString.split('.').map(Number);
  4. }
  5. // 比较版本号 (a > b 返回1, a == b返回0, a < b返回-1)
  6. function compareVersions(versionA, versionB) {
  7. const aParts = parseVersion(versionA);
  8. const bParts = parseVersion(versionB);
  9. const maxLength = Math.max(aParts.length, bParts.length);
  10. for (let i = 0; i < maxLength; i++) {
  11. const a = aParts[i] || 0;
  12. const b = bParts[i] || 0;
  13. if (a > b) return 1;
  14. if (a < b) return -1;
  15. }
  16. return 0;
  17. }
  18. // 获取浏览器信息
  19. function getBrowserInfo() {
  20. const userAgent = 'mozilla/5.0 (windows nt 10.0; win64; x64) applewebkit/537.36 (khtml, like gecko) chrome/109.0.0.0 safari/537.36' || navigator.userAgent.toLowerCase();
  21. let browserInfo = {
  22. name: 'Unknown',
  23. version: 'Unknown',
  24. versionParts: []
  25. };
  26. // 检测浏览器类型和版本
  27. if (/edge\/([\d.]+)/.test(userAgent)) {
  28. browserInfo.name = 'Edge';
  29. browserInfo.version = userAgent.match(/edge\/([\d.]+)/)[1];
  30. } else if (/chrome\/([\d.]+)/.test(userAgent) && !/edge/.test(userAgent)) {
  31. browserInfo.name = 'Chrome';
  32. browserInfo.version = userAgent.match(/chrome\/([\d.]+)/)[1];
  33. } else if (/firefox\/([\d.]+)/.test(userAgent)) {
  34. browserInfo.name = 'Firefox';
  35. browserInfo.version = userAgent.match(/firefox\/([\d.]+)/)[1];
  36. } else if (/safari\/([\d.]+)/.test(userAgent) && !/chrome/.test(userAgent)) {
  37. browserInfo.name = 'Safari';
  38. // Safari的版本号在version/后面
  39. browserInfo.version = userAgent.match(/version\/([\d.]+)/)[1];
  40. } else if (/msie ([\d.]+)/.test(userAgent) || /rv:([\d.]+)/.test(userAgent)) {
  41. browserInfo.name = 'Internet Explorer';
  42. browserInfo.version = userAgent.match(/(msie |rv:)([\d.]+)/)[2];
  43. }
  44. // 解析版本号为数组
  45. if (browserInfo.version !== 'Unknown') {
  46. browserInfo.versionParts = parseVersion(browserInfo.version);
  47. }
  48. // 添加版本比较方法
  49. browserInfo.isGreaterThan = function(version) {
  50. return compareVersions(this.version, version) > 0;
  51. };
  52. browserInfo.isLessThan = function(version) {
  53. return compareVersions(this.version, version) < 0;
  54. };
  55. browserInfo.isEqual = function(version) {
  56. return compareVersions(this.version, version) === 0;
  57. };
  58. browserInfo.isGreaterOrEqual = function(version) {
  59. return compareVersions(this.version, version) >= 0;
  60. };
  61. browserInfo.isLessOrEqual = function(version) {
  62. return compareVersions(this.version, version) <= 0;
  63. };
  64. return browserInfo;
  65. }
  66. // 使用示例
  67. export const browser = getBrowserInfo();
  68. console.log(`浏览器: ${browser.name} ${browser.version}`);
  69. // 版本比较示例
  70. if (browser.name === 'Chrome') {
  71. if (browser.isLessThan('90.0.0')) {
  72. console.log('你的Chrome浏览器版本过低,请升级到90.0.0或更高版本');
  73. } else {
  74. console.log('你的Chrome浏览器版本符合要求');
  75. }
  76. }
  77. if (browser.name === 'Firefox') {
  78. if (browser.isGreaterOrEqual('88.0')) {
  79. console.log('你的Firefox浏览器支持最新特性');
  80. }
  81. }