前端开发时,有些需求,需要得到访问客户的ip地址,大多时候靠后端完成,但其实前端也可以拿到,例如下面三种:

第一种:用于仅支持IE的且允许Activex运行,利用ActiveObject来获取。

第二种:利用其它平台的接口,在自己程序中使用如:新浪,搜狐、太平洋等的接口,来给用户返回ip地址

 <script type="text/javascript" src="http://pv.sohu.com/cityjson?ie=utf-8"></script><script>// 公网ip地址console.log(returnCitySN["cip"])</script>

第三种:使用WebRTC(Web Real-Time Communications),他的定义是一项实时通讯技术,它允许网络应用或者站点,在不借助中间媒介的情况下,建立浏览器之间点对点(Peer-to-Peer)的连接,实现视频流和(或)音频流或者其他任意数据的传输。这些信息和基本api在MDN上面是可以查看的。我们可以使用WebRTC获取ip地址,经测试,在chrome,opera,firefox,safari均可正常获取,对于IE和Edge,可以采用第一种方式进行兼容。下面是获取代码(这里没有支持IE/Edge):

如果使用 chrome 浏览器打开,此时可能会看到一串类似于:`e87e041d-15e1-4662-adad-7a6601fca9fb.local  的机器码,这是因为chrome 默认是隐藏掉 内网IP地址的,可以通过修改 chrome 浏览器的配置更改此行为:

在chrome 浏览器地址栏中输入:chrome://flags/

搜索#enable-webrtc-hide-local-ips-with-mdns 该配置 并将属性改为 disabled

  // 内网ip地址var RTCPeerConnection =window.webkitRTCPeerConnection || window.mozRTCPeerConnection;if (RTCPeerConnection) (function () {var rtc = new RTCPeerConnection({iceServers:[]});if (1 || window.mozRTCPeerConnection) {   rtc.createDataChannel('', {reliable:false});};rtc.onicecandidate = function (evt) {// convert the candidate to SDP so we can run it through our general parser// see https://twitter.com/lancestout/status/525796175425720320 for detailsif (evt.candidate) grepSDP("a="+evt.candidate.candidate);};rtc.createOffer(function (offerDesc) {grepSDP(offerDesc.sdp);rtc.setLocalDescription(offerDesc);}, function (e) { console.warn("offer failed", e); });var addrs = Object.create(null);addrs["0.0.0.0"] = false;function updateDisplay(newAddr) {if (newAddr in addrs) return;else addrs[newAddr] = true;var displayAddrs = Object.keys(addrs).filter(function (k) { return addrs[k]; });document.getElementById('list').textContent = displayAddrs.join(" or perhaps ") || "n/a";}function grepSDP(sdp) {var hosts = [];sdp.split('\r\n').forEach(function (line) { if (~line.indexOf("a=candidate")) {    var parts = line.split(' '),     addr = parts[4],type = parts[7];if (type === 'host') updateDisplay(addr);} else if (~line.indexOf("c=")) { var parts = line.split(' '),addr = parts[2];updateDisplay(addr);}});}})(); else {document.getElementById('list').innerHTML = "<code>ifconfig | grep inet | grep -v inet6 | cut -d\" \" -f2 | tail -n1</code>";document.getElementById('list').nextSibling.textContent = "In Chrome and Firefox your IP should display automatically, by the power of WebRTCskull.";}

获取浏览器信息:使用包含浏览器信息的Navigator对象,这个对象虽然没有公开标准,但是所有的浏览器都支持他,主要用到的是useragent属性,它包含了这些信息,我们要做的只是使用正则表达式分离和提取,针对不同的浏览器,兼容chrome,firefox,opera,ie,edge,safari等,对于其他浏览器,例如360极速等,会返回相应内核对应的浏览器名称。也可以再进行其他判断。下面是代码:

function getBrowserInfo(){var agent = navigator.userAgent.toLowerCase() ;console.log(agent);var arr = [];var system = agent.split(' ')[1].split(' ')[0].split('(')[1];arr.push(system);var regStr_edge = /edge\/[\d.]+/gi;var regStr_ie = /trident\/[\d.]+/gi ;var regStr_ff = /firefox\/[\d.]+/gi;var regStr_chrome = /chrome\/[\d.]+/gi ;var regStr_saf = /safari\/[\d.]+/gi ;var regStr_opera = /opr\/[\d.]+/gi;//IEif(agent.indexOf("trident") > 0){arr.push(agent.match(regStr_ie)[0].split('/')[0]);arr.push(agent.match(regStr_ie)[0].split('/')[1]);return arr;}//Edgeif(agent.indexOf('edge') > 0){arr.push(agent.match(regStr_edge)[0].split('/')[0]);arr.push(agent.match(regStr_edge)[0].split('/')[1]);return arr;}//firefoxif(agent.indexOf("firefox") > 0){arr.push(agent.match(regStr_ff)[0].split('/')[0]);arr.push(agent.match(regStr_ff)[0].split('/')[1]);return arr;}//Operaif(agent.indexOf("opr")>0){arr.push(agent.match(regStr_opera)[0].split('/')[0]);arr.push(agent.match(regStr_opera)[0].split('/')[1]);return arr;}//Safariif(agent.indexOf("safari") > 0 && agent.indexOf("chrome") < 0){arr.push(agent.match(regStr_saf)[0].split('/')[0]);arr.push(agent.match(regStr_saf)[0].split('/')[1]);return arr;}//Chromeif(agent.indexOf("chrome") > 0){arr.push(agent.match(regStr_chrome)[0].split('/')[0]);arr.push(agent.match(regStr_chrome)[0].split('/')[1]);return arr;}else{arr.push('请更换主流浏览器,例如chrome,firefox,opera,safari,IE,Edge!')return arr;}}

js获取ip地址、浏览器信息相关推荐

  1. js获取IP地址多种方法实例教程

    js获取IP地址方法总结  js代码获取IP地址的方法,如何在js中取得客户端的IP地址. 原文地址:js获取IP地址的三种方法 http://www.jbxue.com/article/11338. ...

  2. JS获取IP地址,控制台提示returnCitySN未定义的问题

    问题:通过搜狐的IP地址查询接口https://pv.sohu.com/cityjsonx去获取IP地址的时候,控制台报错:returnCitySN未定义. 解决方案:可以通过在链接后面添加时间戳的方 ...

  3. js获取ip地址_(原创)Node.JS实战31:大名鼎鼎的Express!

    Express (http://expressjs.com)是Node.JS中一个简洁.灵活.强大的Web应用框架, 它提供了一系列强大特性,可以帮助我们快速创建各种Web 应用,也可用来编写各种的W ...

  4. JS获取IP地址,登录地点的方法

    JS <!--下面一个开放的JS中有一个方法可以获取当前IP地址--> <script src="http://pv.sohu.com/cityjson?ie=utf-8& ...

  5. 利用前端js获取ip地址

    方法三(所有的平台及浏览器): 使用的搜狐接口 复制代码 代码如下: <script src="http://pv.sohu.com/cityjson?ie=utf-8"&g ...

  6. IE JS获取IP地址

    1.IE打开该HTML文件 2.允许Activex运行 3.F12打开开发者工具查看IP ps: 该代码参考自:https://stackoverflow.com/questions/50640062 ...

  7. js 获取ip地址进行跳转

    搜狐: 第一步:在页面上引用: <script src="http://pv.sohu.com/cityjson?ie=utf-8"></script> 上 ...

  8. JS获取系统和浏览器信息

  9. uniapp如何获取IP地址

    uniapp如何获取IP地址 获取ip地址 js获取ip地址 uni-app获取ip地址 获取ip地址 最近一个uni项目涉及到获取IP地址,在网上看到用引入外部JS的方法来获取,uni-app配置模 ...

  10. python 根据地址求经纬度 谷歌_js获取ip地址利用谷歌地图获得经纬度

    js获取ip地址利用谷歌地图获得经纬度-www.jquerycn.cn var  massage=null; function userip(ip){ $.getScript("http:/ ...

最新文章

  1. linux+平均磁盘请求数量_SUSE LINUX下磁盘IO性能监测分析
  2. Windows2008下搭建NFS实现windows空间提供linux使用
  3. python编写一个压测重启的测试程序
  4. Java的poi的excel导入怎么判断日期格式的单元格
  5. Java代码生成同一色系颜色_求大侠帮忙给这段JAVA代码 设置个背景颜色!
  6. ndarray python 映射_在Matlab的delsq演示中,用numpy方法对向量映射进行ndarray处理?...
  7. thinkphp结合U方法,点击验证码刷新
  8. csdn android视频播放器开发
  9. java是如何简化成一行代码的?-----Lambda表达式初识
  10. Flash游戏破解参考
  11. Postman下载与安装详细步骤
  12. 向量的方向余弦公式_方向余弦怎么求
  13. 直接加QQ好友的链接或会话的方法
  14. ARM9——五级流水线结构,以及PC指针
  15. 论文笔记:Teaching Machine to Read and Comprehend
  16. STM32CubeMX5.6.1生成的代码无启动文件
  17. C++笔记(Ⅵ_模板)
  18. 信息流广告投放的技巧
  19. 庖丁解牛linux内核,庖丁解牛Linux网络核心
  20. 哈希表:线性探查法和平方探查法

热门文章

  1. 德标螺纹规格对照表_德标 国标,国际标准中英文对照表
  2. git 2.15下载 git 2.18下载 windows 64位
  3. 怎么把做的html转成链接,网页链接怎么转换成文件
  4. 计算机主板别称是什么城,上海别称什么城?
  5. 斯坦福密码学-2-流密码steam_ciphers
  6. 【数字信号调制】Matlab实现PCM编码和QAM调制
  7. REST及RESTful原则
  8. Java 菜鸟入门 | Java中的静态变量、实例变量、局部变量和成员变量
  9. 免费翻译软件哪个好用
  10. ps一点通精品知识库