如何在JavaScript中检测internet连接是否已关闭或域/URL不存在?
问题:我如何知道XMLHttpRequest失败是因为internet连接关闭还是因为请求的域不存在 背景与背景:Chrome扩展,可以在任何域中制作XHTT前传 代码:如何在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) { //
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),它又可以访问了(有人修复路由器设置或其他)。因此,如果某个网站在某个时刻无法及时访问,我们无法可靠地确定该网站是否真的死掉了。“遥不可及”的定义过于宽泛。