最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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
}

看一下執(zhí)行后的效果:

獲取用戶訪問的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獲取網頁信息內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 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 文件中,這樣做的好處是,節(jié)省了一個HTTP 請求
    2014-04-04
  • 原生JS 實現的input輸入時表格過濾操作示例

    原生JS 實現的input輸入時表格過濾操作示例

    這篇文章主要介紹了原生JS 實現的input輸入時表格過濾操作,結合實例形式分析了JavaScript基于頁面元素遍歷、運算、判斷實現的表格過濾相關操作技巧,需要的朋友可以參考下
    2019-08-08

最新評論

景德镇市| 九江市| 龙川县| 仁寿县| 扶沟县| 汉阴县| 安丘市| 宾阳县| 策勒县| 卢湾区| 邵阳县| 孝感市| 礼泉县| 山阳县| 黄龙县| 武隆县| 拉孜县| 定日县| 大方县| 南岸区| 新干县| 海伦市| 长春市| 石景山区| 车险| 鹤岗市| 梅河口市| 鄄城县| 含山县| 乐安县| 通许县| 郸城县| 广平县| 甘孜| 九龙城区| 高阳县| 巴南区| 调兵山市| 湘西| 玉溪市| 荆门市|