我需要以某种方式检索客户端的IP地址使用JavaScript;没有服务器端代码,甚至没有SSI。

然而,我并不反对使用免费的第三方脚本/服务。


当前回答

我将提供一个方法,当我想在html页面中存储信息时,我经常使用这个方法,并且希望我的javascript能够读取信息,而不需要实际地将参数传递给javascript。当您的脚本被外部引用而不是内联引用时,这尤其有用。

然而,它不符合“没有服务器端脚本”的标准。但是如果你可以在你的html中包含服务器端脚本,可以这样做:

将隐藏标签元素设置在html页面的底部,就在结束主体标签的上方。

你的标签看起来是这样的:

<label id="ip" class="hiddenlabel"><?php echo $_SERVER['REMOTE_ADDR']; ?></label>

一定要创建一个名为hiddenlabel的类,并设置visibility:hidden,这样就没有人真正看到这个标签。你可以用这种方式在隐藏标签中存储很多东西。

现在,在你的javascript中,检索存储在标签中的信息(在这种情况下是客户端的ip地址),你可以这样做:

var ip = document.getElementById("ip").innerHTML;

现在你的变量“ip”等于ip地址。现在可以将ip传递给API请求了。

*编辑2年后* 两个小的改进:

我经常使用这种方法,但是调用标签class="data",因为实际上,这是一种存储数据的方法。类名“hiddenlabel”是一个愚蠢的名字。

第二个修改是在样式表中,而不是visibility:hidden:

.data{
    display:none;
}

...是更好的方法。

其他回答

在你的页面中包含以下代码:<script type="text/javascript" src="http://l2.io/ip.js"></script>

点击这里了解更多

实际上没有可靠的方法来获取客户端计算机的IP地址。

这涉及到一些可能性。如果用户有多个接口,那么使用Java的代码将会中断。

http://nanoagent.blogspot.com/2006/09/how-to-find-evaluate-remoteaddrclients.html

从这里的其他答案来看,听起来您可能想要获得客户端的公共IP地址,这可能是他们用来连接到互联网的路由器的地址。很多其他的答案都谈到了这个。我建议创建并托管您自己的服务器端页面,用于接收请求并使用IP地址响应,而不是依赖于其他人的服务,因为其他人的服务可能继续工作,也可能无法继续工作。

使用Smart-IP.net Geo-IP API。例如,使用jQuery:

$(document).ready( function() {
    $.getJSON( "http://smart-ip.net/geoip-json?callback=?",
        function(data){
            alert( data.host);
        }
    );
});

如果你在某个地方使用NGINX,你可以添加这个片段并通过任何AJAX工具询问你自己的服务器。

location /get_ip {
    default_type text/plain;
    return 200 $remote_addr;
}

试试这个:http://httpbin.org/ip(或https://httpbin.org/ip)

https的示例:

$.getJSON('https://httpbin.org/ip', function(data) {
                console.log(data['origin']);
});

来源:http://httpbin.org/