js检测浏览器及系统信息

简介: js检测浏览器及系统信息

背景


本文主要用于记录~

还有希望找到伙伴加我好友,加我微信吧,一起玩耍干饭


最近我们需要一个工具,可以检测客户在使用我们产品的时候的系统及浏览器环境。以便出现问题我们准确的进行复现调试。 按照需要,我主要做了以下几点:


  • 浏览器版本信息
  • 系统时间
  • 系统版本
  • 屏幕分辨率
  • 浏览器缩放比例
  • 网络连通性测试


针对浏览器:


  • IE
  • Chrome
  • firefox
  • Edge

下面我们开始逐一分享。


浏览器版本信息


获取用户使用的浏览器极其版本信息,支持:IEChromefirefoxEdge

输出格式: Chrome版本号89.0.4389.90


function getBrowserInfo() {
    var strStart = 0;
    var strStop = 0;
    var temp = '';
    var broInfo = '';
    console.log(window.navigator);
    var userAgent = window.navigator.userAgent; //包含以下属性中所有或一部分的字符串:appCodeName,appName,appVersion,language,platform
    //FireFox
    if (userAgent.indexOf('Firefox') != -1) {
        strStart = userAgent.indexOf('Firefox');
        temp = userAgent.substring(strStart);
        broInfo = temp.replace('/', '版本号')
    }
    //Edge
    if (userAgent.indexOf('Edge') != -1) {
        strStart = userAgent.indexOf('Edge');
        temp = userAgent.substring(strStart);
        broInfo = temp.replace('/', '版本号');
    }
    //IE浏览器
    if (userAgent.indexOf('NET') != -1 && userAgent.indexOf("rv") != -1) {
        strStart = userAgent.indexOf('rv');
        strStop = userAgent.indexOf(')');
        temp = userAgent.substring(strStart, strStop);
        broInfo = temp.replace('rv', 'IE').replace(':', '版本号');
    }
    //Chrome浏览器
    if (userAgent.indexOf('WOW') < 0 && userAgent.indexOf("Edge") < 0 && userAgent.indexOf('Chrome') != -1) {
        strStart = userAgent.indexOf('Chrome');
        strStop = userAgent.indexOf(' Safari');
        temp = userAgent.substring(strStart, strStop);
        broInfo = temp.replace('/', '版本号');
    }
    return broInfo;
}


系统时间


这个就感觉是个凑数功能了~


function setSystemTime() {
    var date = new Date();
    document.getElementById('systemTime').innerHTML = date.toLocaleString();
}


系统版本


function getOS() {
    var sUserAgent = navigator.userAgent;
    var isWin = (navigator.platform == "Win32") || (navigator.platform == "Windows");
    var isMac = (navigator.platform == "Mac68K") || (navigator.platform == "MacPPC") || (navigator.platform == "Macintosh") || (navigator.platform == "MacIntel");
    if (isMac) return "Mac";
    var isUnix = (navigator.platform == "X11") && !isWin && !isMac;
    if (isUnix) return "Unix";
    var isLinux = (String(navigator.platform).indexOf("Linux") > -1);
    if (isLinux) return "Linux";
    if (isWin) {
        var isWin2K = sUserAgent.indexOf("Windows NT 5.0") > -1 || sUserAgent.indexOf("Windows 2000") > -1;
        if (isWin2K) return "Win2000";
        var isWinXP = sUserAgent.indexOf("Windows NT 5.1") > -1 || sUserAgent.indexOf("Windows XP") > -1;
        if (isWinXP) return "WinXP";
        var isWin2003 = sUserAgent.indexOf("Windows NT 5.2") > -1 || sUserAgent.indexOf("Windows 2003") > -1;
        if (isWin2003) return "Win2003";
        var isWinVista = sUserAgent.indexOf("Windows NT 6.0") > -1 || sUserAgent.indexOf("Windows Vista") > -1;
        if (isWinVista) return "WinVista";
        var isWin7 = sUserAgent.indexOf("Windows NT 6.1") > -1 || sUserAgent.indexOf("Windows 7") > -1;
        if (isWin7) return "Win7";
        var isWin10 = sUserAgent.indexOf("Windows NT 10") > -1 || sUserAgent.indexOf("Windows 10") > -1;
        if (isWin10) return "Win10";
    }
    return "other";
}


浏览器缩放比例


function getScaling(){
    var ratio = 0,
    screen = window.screen,
    ua = navigator.userAgent.toLowerCase();
    if (window.devicePixelRatio !== undefined) {
        ratio = window.devicePixelRatio;
    }
    else if (~ua.indexOf('msie')) {
        if (screen.deviceXDPI && screen.logicalXDPI) {
            ratio = screen.deviceXDPI / screen.logicalXDPI;
        }
    }
    else if (window.outerWidth !== undefined && window.innerWidth !== undefined) {
        ratio = window.outerWidth / window.innerWidth;
    }
    return ratio.toFixed(2);
}


屏幕分辨率


这里IE有一点奇葩,需要单独处理,因为他的 screen.width和screen.height属性会根据缩放比例变化~


function getScreenDist(){
    if (getBrowserInfo().indexOf('IE') === -1) {
        return screen.width + '*' + screen.height; 
    }else{
        //IE单独处理
        const scale = getScaling();
        return Math.round(screen.width*scale) + '*' + Math.round(screen.height*scale);
    }
}


网络连通性测试


因为同源策略,这里我使用了jquery的jsonp进行实现~


function testUrl() {
    var url;
    var img;
    var iframe;
    document.getElementById('row_confirm').addEventListener('click', function () {
        url = document.getElementsByClassName('row_input')[0].value;
        if (!url) {
            alert('请输入url');
            return;
        }
        $.ajax({
            type: 'get',
            cache: false,
            url: url,
            dataType: "jsonp", //跨域采用jsonp方式 
            processData: false,
            timeout:10000, 
            complete: function (data) {
                if (data.status==200) {
                    alert('网络联通!')
                } else {
                    alert('该网络不连通!'+data.status)
                }
            }
        });
    })
}


相关文章
|
29天前
|
监控 JavaScript Java
Node.js中内存泄漏的检测方法
检测内存泄漏需要综合运用多种方法,并结合实际的应用场景和代码特点进行分析。及时发现和解决内存泄漏问题,可以提高应用的稳定性和性能,避免潜在的风险和故障。同时,不断学习和掌握内存管理的知识,也是有效预防内存泄漏的重要途径。
124 52
|
1月前
|
移动开发 JavaScript 前端开发
一些处理浏览器兼容性问题的JavaScript库
这些库在处理浏览器兼容性问题方面都有着各自的特点和优势,可以根据具体的需求和项目情况选择合适的库来使用,从而提高代码的兼容性和稳定性,为用户提供更好的体验。同时,随着浏览器技术的不断发展,还需要持续关注和学习新的兼容性解决方案。
104 48
|
1月前
|
JSON 移动开发 JavaScript
在浏览器执行js脚本的两种方式
【10月更文挑战第20天】本文介绍了在浏览器中执行HTTP请求的两种方式:`fetch`和`XMLHttpRequest`。`fetch`支持GET和POST请求,返回Promise对象,可以方便地处理异步操作。`XMLHttpRequest`则通过回调函数处理请求结果,适用于需要兼容旧浏览器的场景。文中还提供了具体的代码示例。
在浏览器执行js脚本的两种方式
|
1月前
|
JavaScript 前端开发 数据处理
模板字符串和普通字符串在浏览器和 Node.js 中的性能表现是否一致?
综上所述,模板字符串和普通字符串在浏览器和 Node.js 中的性能表现既有相似之处,也有不同之处。在实际应用中,需要根据具体的场景和性能需求来选择使用哪种字符串处理方式,以达到最佳的性能和开发效率。
|
1月前
|
算法 开发者
Moment.js库是如何处理不同浏览器的时间戳格式差异的?
总的来说,Moment.js 通过一系列的技术手段和策略,有效地处理了不同浏览器的时间戳格式差异,为开发者提供了一个稳定、可靠且易于使用的时间处理工具。
36 1
|
1月前
|
Web App开发 JavaScript 前端开发
使用 Chrome 浏览器的内存分析工具来检测 JavaScript 中的内存泄漏
【10月更文挑战第25天】利用 Chrome 浏览器的内存分析工具,可以较为准确地检测 JavaScript 中的内存泄漏问题,并帮助我们找出潜在的泄漏点,以便采取相应的解决措施。
261 9
|
1月前
|
机器学习/深度学习 自然语言处理 前端开发
前端神经网络入门:Brain.js - 详细介绍和对比不同的实现 - CNN、RNN、DNN、FFNN -无需准备环境打开浏览器即可测试运行-支持WebGPU加速
本文介绍了如何使用 JavaScript 神经网络库 **Brain.js** 实现不同类型的神经网络,包括前馈神经网络(FFNN)、深度神经网络(DNN)和循环神经网络(RNN)。通过简单的示例和代码,帮助前端开发者快速入门并理解神经网络的基本概念。文章还对比了各类神经网络的特点和适用场景,并简要介绍了卷积神经网络(CNN)的替代方案。
119 1
|
7月前
|
JavaScript 前端开发
JavaScript DOM 操作:如何检测浏览器是否支持某个特性?
JavaScript DOM 操作:如何检测浏览器是否支持某个特性?
58 0
|
SQL Web App开发 JavaScript
js检测浏览器终端
js检测浏览器终端
133 0