Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JavaScript中检测internet连接是否已关闭或域/URL不存在?_Javascript_Ajax_Google Chrome_Xmlhttprequest - Fatal编程技术网

如何在JavaScript中检测internet连接是否已关闭或域/URL不存在?

如何在JavaScript中检测internet连接是否已关闭或域/URL不存在?,javascript,ajax,google-chrome,xmlhttprequest,Javascript,Ajax,Google Chrome,Xmlhttprequest,问题:我如何知道XMLHttpRequest失败是因为internet连接关闭还是因为请求的域不存在 背景与背景:Chrome扩展,可以在任何域中制作XHTT前传 代码: function isOnline(url, callback) { var xhr = new XMLHttpRequest(); var result = {status: 0, online: true}; xhr.onerror = function(data) { //

问题:我如何知道XMLHttpRequest失败是因为internet连接关闭还是因为请求的域不存在

背景与背景:Chrome扩展,可以在任何域中制作XHTT前传

代码:

function isOnline(url, callback)
{

    var xhr = new XMLHttpRequest();
    var result = {status: 0, online: true};

    xhr.onerror = function(data) { 
        // note! data object here doesn't contain any useful info about the reason
        result.online = false;
    };

    xhr.onreadystatechange = function(data) {
        if (xhr.readyState == 4) 
        {
            result.status = xhr.status;
            result.message = xhr.statusText;
            // timeout is needed since onerror is processed AFTER onreadystatechange
            setTimeout(function() { callback(result) }, 100);
        }
    };

    xhr.open('HEAD', url + "?rand=" + Math.random(), true);
    try
    {
        xhr.send();
    }
    catch(error)
    {
        console.log("This line is never shown");
    }
}
现在的问题是,如果互联网连接断开,我打电话

isOnline("http://www.nonexistentdomain.com", function(result) { console.log(result); });
xhr.onerror处理程序激发,状态为0,联机:false

如果网络连接断开,并且我进行了相同的呼叫,则结果是相同的(状态=0,联机:false)

换句话说,似乎无法确定请求的URL或域是否不存在,或者网络连接是否已关闭

尽管抛出了异常,但xhr.send()周围的try-catch块实际上并没有捕获任何异常(见chrome控制台)

也编码

navigator.isOnline
在Chrome扩展中似乎总是返回true,即使网络连接未打开,因此无法使用

因此,我要么需要一种100%可靠的方法来确定Internet连接是否正常,要么需要一种方法在XMLHttpRequest中确定故障是由于网络不可用还是由于域不存在

如果不能使用XMLHttpRequest类来确定域是否不存在或网络连接是否已关闭,我可能必须在每次“真正的请求”之前检查internet连接。啊!此外,由于谷歌在许多国家被屏蔽,因此使用www.google.com等网站进行检查也行不通。www.microsoft.com或许可以,但不知何故我讨厌这个主意


有什么想法吗?

如果我正确理解了这个问题。。。您需要区分internet关闭或错误的dns

基本上。。。你不能,嗯。。。除非你再向其他地方提出请求。你所能知道的只是目的地遥不可及。这是因为你不能真正定义“互联网瘫痪”。你如何定义它?如果我不能通过我的网关,互联网就会关闭?如果我有两个支持者一个接一个呢?还是3?你说:如果我不能通过3个网关,互联网就瘫痪了?那如果我有1000呢

所以。。。你所能做的最多就是你所说的:向别的东西提出请求。如microsoft.com或example.net或其他任何。。。你可以提出更多的请求,如果所有请求都失败了,那么你可以说所有请求都失败了。这让你可以说“如果我不能达到任何这些,那么互联网是关闭的”。这确实不是100%可靠,但可能符合您的需要


关于无效目的地。。。同样的问题。目的地可能有效,但由于某些原因,您可能无法到达。原因可能包括:dns未完全传播、路由中断等。

谢谢。“互联网瘫痪”困境的一个好观点。此外,某些站点可能在时间点X无法访问,但过了一段时间(时间点X+20),它又可以访问了(有人修复路由器设置或其他)。因此,如果某个网站在某个时刻无法及时访问,我们无法可靠地确定该网站是否真的死掉了。“遥不可及”的定义过于宽泛。