花了1天时间踩坑,终于探索出来了最方便的解决方式。。
网上大部分大厂的获取ip的方式都已不可用,只有搜狐接口还有一些小网站搞出来的接口能用。这里我使用的是搜狐获取IP的接口
搜狐接口返回的是一个js变量,类似下面格式:

var returnCitySN = {"cip": "XXX.XXX.XXX.XXX", "cid": "100000", "cname": "北京市"};

html文件访问

直接引用js文件就行

<html>
<body>
	<div class="center" id="ip"></div>
	<script src="http://pv.sohu.com/cityjson?ie=utf-8"></script>
	<script type="text/javascript">
		<!-- document.write(returnCitySN["cip"]+','+returnCitySN["cname"]) -->
		var words = returnCitySN["cname"]+': '+returnCitySN["cip"];
		document.getElementById('ip').innerHTML = words;
	</script>
</body>
</html>

错误使用方式

1、在后端直接获取接口数据

最开始我就是用的这种方式,获取接口数据后再将处理后的数据返回给前端 。直到我把项目放到云服务器后,才发现后端获取的接口数据其实是服务端的ip,并不是客户端的ip。

2、在vue项目中引用js文件

像我上面写的html使用方法一样,使用两个script标签,导入js文件。
毫无疑问报错了。
报错原因:vue是单页面应用,不能使用两个script标签

3、前端使用axios访问接口,将数据传到后端处理

使用axios访问接口,具体方法这里不再赘述。结果就是和第1条的结果一样,接口返回的数据是服务端的ip,并不是客户端的ip。

正确使用姿势

在项目中的index.html文件导入js文件

    <script src="http://pv.sohu.com/cityjson?ie=utf-8"></script>
    <script type="text/javascript">
      var Ip=returnCitySN['cip']
      var cityname=returnCitySN['cname']
      localStorage.setItem('Ip', Ip)
    </script>

其中最重要的是localStorage.setItem(‘key’,A)函数,关于这个函数,百科是这样说的:

在HTML5中,新加入了一个localStorage特性,这个特性主要是用来作为本地存储来使用的,解决了cookie存储空间不足的问题(cookie中每条cookie的存储空间为4k),localStorage中一般浏览器支持的是5M大小,这个在不同的浏览器中localStorage会有所不同。

setItem可以将变量A存储到key字段,这样我们就可以在index.html文件导入后,在全局使用这个变量:

let strIp:string=String(localStorage.getItem('Ip'))
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐