JS获取用户访问网页的浏览器数据和IP地址信息

 更新时间:2025年08月26日 08:57:50   作者:叫我+V  
这篇文章主要为大家详细介绍了如何使用JS实现获取用户访问网页的浏览器数据和IP地址信息,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下

要做一个网站统计功能,需要获取用户访问的浏览器类型、版本、用户访问的IP地址、用户的所在城市、访问时间、访问路径。

因为我们这个只需要统计访问的那个页面就可以,不需要记录具体点击了那些功能,所以就只需要想办法获取用户访问的浏览器类型、版本、用户访问的IP地址、用户的所在城市、访问时间、访问路径。这几个数据就可以啦!

PS:不让我们使用百度统计这种三方网站,如果可以使用百度统计的话,贼拉拉简单。

获取浏览器数据

获取访问设备信息就很简单,直接下面这个方法,在项目里封装一下直接调用就可以啦:

// 获取用户访问浏览器设备信息
function userAgent() {
  let browserReg = {
    Chrome: /Chrome/,
    IE: /MSIE/,
    Firefox: /Firefox/,
    Opera: /Presto/,
    Safari: /Version\/([\d.]+).*Safari/,
    '360': /360SE/,
    QQBrowswe: /QQ/,
    Edge: /Edg/
  };
  let deviceReg = {
    iPhone: /iPhone/,
    iPad: /iPad/,
    Android: /Android/,
    Windows: /Windows/,
    Mac: /Macintosh/,
  };
  let userAgentStr = navigator.userAgent
  const userAgentObj = {
    browserName: '', // 浏览器名称
    browserVersion: '', // 浏览器版本
    osName: '', // 操作系统名称
    osVersion: '', // 操作系统版本
    deviceName: '', // 设备名称
  }
  for (let key in browserReg) {
    if (browserReg[key].test(userAgentStr)) {
      userAgentObj.browserName = key
      if (key === 'Chrome') {
        userAgentObj.browserVersion = userAgentStr.split('Chrome/')[1].split(' ')[0]
      } else if (key === 'IE') {
        userAgentObj.browserVersion = userAgentStr.split('MSIE ')[1].split(' ')[1]
      } else if (key === 'Firefox') {
        userAgentObj.browserVersion = userAgentStr.split('Firefox/')[1]
      } else if (key === 'Opera') {
        userAgentObj.browserVersion = userAgentStr.split('Version/')[1]
      } else if (key === 'Safari') {
        userAgentObj.browserVersion = userAgentStr.split('Version/')[1].split(' ')[0]
      } else if (key === '360') {
        userAgentObj.browserVersion = ''
      } else if (key === 'QQBrowswe') {
        userAgentObj.browserVersion = userAgentStr.split('Version/')[1].split(' ')[0]
      } else if (key === 'Edge') {
        userAgentObj.browserVersion = userAgentStr.split('Edg/')[1].split(' ')[0]
      }
    }
  }

  for (let key in deviceReg) {
    if (deviceReg[key].test(userAgentStr)) {
      userAgentObj.osName = key
      if (key === 'Windows') {
        userAgentObj.osVersion = userAgentStr.split('Windows NT ')[1].split(';')[0]
      } else if (key === 'Mac') {
        userAgentObj.osVersion = userAgentStr.split('Mac OS X ')[1].split(')')[0]
      } else if (key === 'iPhone') {
        userAgentObj.osVersion = userAgentStr.split('iPhone OS ')[1].split(' ')[0]
      } else if (key === 'iPad') {
        userAgentObj.osVersion = userAgentStr.split('iPad; CPU OS ')[1].split(' ')[0]
      } else if (key === 'Android') {
        userAgentObj.osVersion = userAgentStr.split('Android ')[1].split(';')[0]
        userAgentObj.deviceName = userAgentStr.split('(Linux; Android ')[1].split('; ')[1].split(' Build')[0]
      }
    }
  }
  return userAgentObj
}

看一下执行后的效果:

获取用户访问的IP地址

这个也很简单:

// 获取用户访问IP地址
function getIPs(callback) {
  var ip_dups = {};
  var RTCPeerConnection = window.RTCPeerConnection
    || window.mozRTCPeerConnection
    || window.webkitRTCPeerConnection;
  var useWebKit = !!window.webkitRTCPeerConnection;
  var mediaConstraints = {
    optional: [{ RtpDataChannels: true }]
  };
  // 这里就是需要的ICEServer了
  var servers = {
    iceServers: [
      { urls: "stun:stun.services.mozilla.com" },
      { urls: "stun:stun.l.google.com:19302" },
    ]
  };
  var pc = new RTCPeerConnection(servers, mediaConstraints);
  function handleCandidate(candidate) {
    var ip_regex = /([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/
    var hasIp = ip_regex.exec(candidate)
    if (hasIp) {
      var ip_addr = ip_regex.exec(candidate)[1];
      if (ip_dups[ip_addr] === undefined)
        callback(ip_addr);
      ip_dups[ip_addr] = true;
    }
  }
  // 网络协商的过程
  pc.onicecandidate = function (ice) {
    if (ice.candidate) {
      handleCandidate(ice.candidate.candidate);
    }
  };

  pc.createDataChannel("");
  pc.createOffer(function (result) {
    pc.setLocalDescription(result, function () { }, function () { });
  }, function () { });
  setTimeout(function () {
    var lines = pc.localDescription.sdp.split('\n');
    lines.forEach(function (line) {
      if (line.indexOf('a=candidate:') === 0)
        handleCandidate(line);
    });
  }, 1000);
}

调用的话也很简单:

getIPs((ip) => {
  console.log('ip ----> ', ip);
})

看一下效果:

能够打印出外网的IP地址。

获取用户的位置数据

这个比较麻烦,也不麻烦其实,有第三方的API可以使用,但是我写博文的这段时间测试了一些,网上说的很多方式都不能用了,有的可以用,但是需要登录获取token,而且还有访问次数限制。

我找了一个比较简单的,不需要登录也不需要token:

// 获取用户访问位置
function getLocation() {
  fetch('https://ipapi.co/json/')
    .then(res => {
      return res.json();
    }).then(userLocation => {
      console.log("用户位置---> ", userLocation);
    }).catch(err => {
      console.log(err);
    })
}

然后调用一下看一下效果:

基本上是没有什么问题的。

注意:

没有必要每次切换的时候都获取一遍,我们可以在最开始获取一次,然后存入 sessionStorage 里面,下次使用的时候直接从 sessionStorage 里面获取就行,这样也能比较好的减少请求次数,万一这个网站也有访问次数限制。

到此这篇关于JS获取用户访问网页的浏览器数据和IP地址信息的文章就介绍到这了,更多相关JS获取网页信息内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • javascript json2 使用方法

    javascript json2 使用方法

    这是个人在最近使用json时做的总结,拿出来给没接触过的小弟们晒晒,适用与没接触过json的人员,其中json2。js请到json官网下载。
    2010-03-03
  • JavaScript使用gcoord进行坐标转换的操作指南

    JavaScript使用gcoord进行坐标转换的操作指南

    gcoord是一个轻量级的地理坐标系转换JavaScript库,专门解决百度地图、高德地图等互联网地图坐标系不统一的问题,本文给大家介绍了JavaScript使用gcoord进行坐标转换的操作指南,需要的朋友可以参考下
    2025-12-12
  • javascript中attachEvent用法实例分析

    javascript中attachEvent用法实例分析

    这篇文章主要介绍了javascript中attachEvent用法,实例分析了javascript中事件绑定的相关技巧,需要的朋友可以参考下
    2015-05-05
  • layui table设置前台过滤转义等方法

    layui table设置前台过滤转义等方法

    今天小编就为大家分享一篇layui table设置前台过滤转义等方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-08-08
  • js中javascript:void(0) 真正含义

    js中javascript:void(0) 真正含义

    在javascript中javascript:void(0)经常会用到,大家知道此含有吗,在Javascript中void是一个操作符,该操作符指定要计算一个表达式但是不返回值,本文给大家介绍js中javascript:void(0) 真正含义,需要的朋友可以参考下
    2015-08-08
  • js获取select选中的option的text示例代码

    js获取select选中的option的text示例代码

    获取select选中的option的text的方法有很多,下面为大家介绍下使用js的获取方法,感兴趣的朋友可以参考下
    2013-12-12
  • javascript随机生成用户名的实现方式

    javascript随机生成用户名的实现方式

    这篇文章主要介绍了javascript随机生成用户名的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • 微信小程序返回上一级页面的实现代码

    微信小程序返回上一级页面的实现代码

    这篇文章主要介绍了微信小程序返回上一级页面的实现代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • js 显示base64编码的二进制流网页图片

    js 显示base64编码的二进制流网页图片

    base64简单地说,它把一些 8-bit 数据翻译成标准 ASCII 字符,我们把图像文件的内容直接写在了HTML 文件中,这样做的好处是,节省了一个HTTP 请求
    2014-04-04
  • 原生JS 实现的input输入时表格过滤操作示例

    原生JS 实现的input输入时表格过滤操作示例

    这篇文章主要介绍了原生JS 实现的input输入时表格过滤操作,结合实例形式分析了JavaScript基于页面元素遍历、运算、判断实现的表格过滤相关操作技巧,需要的朋友可以参考下
    2019-08-08

最新评论