检测浏览器版本方法

检测浏览器版本一共有两种方式:

一种是检测 window.navigator.userAgent 的值,但这种方式很不可靠,因为 userAgent 可以被改写,并且早期的浏览器如 ie,会通过伪装自己的 userAgent 的值为 Mozilla 来躲过服务器的检测。

第二种方式是功能检测,根据每个浏览器独有的特性来进行判断,如 ie 下独有的 ActiveXObject。

IE

只有IE支持创建ActiveX控件,它有一个其他浏览器没有的东西,就是ActiveXObject函数。只要判断window对象存在ActiveXObject函数,就可以明确判断出当前浏览器是IE

Safari

Safari浏览器中有一个其他浏览器没有的openDatabase函数,可做为判断Safari的标志

Chrome

Chrome有一个MessageEvent函数,但Firefox也有。不过,好在Chrome并没有Firefox的getBoxObjectFor函数,根据这个条件还是可以准确判断出Chrome浏览器的

Firefox

Firefox中的DOM元素都有一个getBoxObjectFor函数,用来获取该DOM元素的位置和大小(IE对应的中是getBoundingClientRect函数)。这是Firefox独有的,判断它即可知道是当前浏览器是Firefox

Opera

Opera提供了专门的浏览器标志,就是window.opera属性

if (window.ActiveXObject)
    return "IE";
else if (document.getBoxObjectFor)
    return "Firefox";
else if (window.MessageEvent && !document.getBoxObjectFor)
    return "Chrome";
else if (window.opera)
    return "Opera";
else if (window.openDatabase)
    return "Safari";

来源整理自:vue3js.cn 面试官系列