используя javascript для определения ip работает в chrome, а не в firefox или т.e. - PullRequest
0 голосов
/ 05 июля 2011

Я использую JavaScript для определения IP-адреса посетителей. По какой-либо причине он работает в Chrome, а не в Firefox, IE или других браузерах.

Вот мой код:

function getIPAddress() {
    var xmlHttp;

    if (window.XMLHttpRequest) {
        xmlHttp = new XMLHttpRequest();
    } else {
        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    }

    xmlHttp.open("GET", "http://api.hostip.info/get_html.php", false);
    xmlHttp.send();

    var hostipInfo = xmlHttp.responseText.split("\n");

    for (var i = 0; i < hostipInfo.length - 1; i++) {
        var ipAddress = hostipInfo[i].split(":");
        if (ipAddress[0] == "IP") return ipAddress[1];
    }

    return "unknown";
}

В компании, в которой я работаю, я за прокси. Может ли это быть проблемой с прокси или что-то не так с этим кодом? Спасибо.

Просто развернул мой код в нашей тестовой среде, и в IE я получил всплывающее окно с надписью «Эта страница получает доступ к информации, которая не находится под ее контролем. Это создает угрозу безопасности. Вы хотите продолжить?' Если я скажу, да, это работает. Если я скажу, нет, это не так.

Ответы [ 3 ]

1 голос
/ 05 июля 2011

Если вы собираетесь использовать AJAX (именно этот код и есть), я настоятельно рекомендую вам использовать стороннюю оболочку, такую ​​как jQuery.Это значительно повысит кросс-браузерную совместимость и позволит вам сократить код до чего-то вроде этого.

$.post('http://api.hostip.info/get_html.php', function(data){
    alert(data);
});

Дополнительная точка

Как упоминалось Pointy,если ваша страница работает в домене, отличном от hostip.info, вам потребуется настроить локальный PHP для получения таких данных, как это ..

localGetData.php

die(file_get_contents('http://api.hostip.info/get_html.php'));

Новый Ajax

$.post('localGetData.php', function(data){
    alert(data);
});
1 голос
/ 05 июля 2011

for (var i = 0; i < hostipInfo.length - 1; i++) { приведет к возвращению «неизвестно», если hostipInfo имеет только один элемент, изменится на for (var i = 0; i < hostipInfo.length; i++) {.

0 голосов
/ 01 декабря 2012

Причина, по которой это работает в Chrome, заключается в том, что он поддерживает CORS, что позволяет сделать этот запрос междоменным.

Поскольку сайт не поддерживает

...