【问题标题】:Get IP address on Chrome App在 Chrome 应用上获取 IP 地址
【发布时间】:2014-10-01 00:49:45
【问题描述】:

我正在开发一个 Chrome 应用,我需要获取外部 IP 地址。

我已尝试加载外部脚本,但即使我将源代码添加到 manifest.json 文件中的 'content_security_policy',我还是遇到了错误。

我放弃了,然后尝试向 IP 主机/服务网站发出 XMLHttpRequest 请求,但请求需要异步,即使使用 setTimeout(),我也无法将响应保存到变量。

我总是收到undefined,因为在请求完成之前显然已经设置了变量。

那么你能帮我找到一个简单的解决方案来获取 IP 吗?

【问题讨论】:

    标签: javascript ip-address google-chrome-app


    【解决方案1】:

    这个站点http://jsonip.com/ 输出一个JSON 对象,如下所示:

    {"ip":"xxx.xxx.xxx.xxx","about":"/about","Pro!":"http://getjsonip.com"}
    

    您可以像这样对该站点执行异步XMLHttpRequest

    var xhr = new XMLHttpRequest(),
        IP_ADDRESS;
    
    xhr.onreadystatechange = function() {
        if (xhr.readyState==4 && xhr.status==200) {
            IP_ADDRESS = JSON.parse(xhr.responseText).ip;
            console.log('IP ADDRESS: ' + IP_ADDRESS);
            // Log it or do something else so you'll know that the response has been received
        }
    }
    
    xhr.open('GET', 'http://jsonip.com/', true);
    xhr.send();
    

    一段时间后,您会在控制台中看到这样的日志:

    IP ADDRESS: 12.34.567.89
    

    【讨论】:

    • 你的代码看起来和我之前做的一样,但问题是,如果我尝试console.log(IP_ADDRESS),它会显示undefined。奇怪的是,当我 console.log(xhr) 时,我可以看到带有正确 responseText 的整个 JSON 对象,但如果我 console.log(xhr['responseText'] 它再次显示 undefined。你能帮我么?我需要将 IP 保存在变量中。
    • 它在我的 Chrome 扩展程序上运行良好:i.imgur.com/6ZCIt6B.jpg。确保您正确复制了我的所有代码(并在后台页面中使用它)。
    • 我复制了您的代码,就像您发布的一样,但是如果我尝试在您的代码之后立即访问 IP_ADDRESS 变量,我会得到undefined,因为它是一个异步请求。但我想它会做,因为我不需要在你的代码之后立即使用变量。干杯!
    • 显然,如果您在请求之后立即调用 var,它将是 undefined man!您必须创建一个函数以在请求结束时调用。在该函数中,您知道变量存在并且可以使用它……这是基本的编程逻辑。
    猜你喜欢
    • 2017-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-10
    • 2010-11-04
    • 2014-09-27
    • 2015-04-16
    • 1970-01-01
    相关资源
    最近更新 更多