如何在JavaScript中检测互联网连接是否断开或域名/URL不存在
How to detect in JavaScript whether internet connection is down or domain/URL is non-existent?
问题:我如何知道XMLHttpRequest失败是因为互联网连接断开还是因为请求的域不存在?
的背景,上下文:Chrome扩展,可以使xhttprequest到任何域。
代码: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");
}
}
现在的问题是,如果网络连接是UP的,我调用
isOnline("http://www.nonexistentdomain.com", function(result) { console.log(result); });
xhr。Onerror处理程序触发并且status = 0, online: false.
如果网络连接是DOWN,我拨打同样的电话,结果是一样的(status = 0, online: false)
换句话说,似乎不可能确定所请求的URL或域是否不存在,或者网络连接是否断开?
xhr.send()周围的try-catch块实际上并不捕获任何异常,尽管会抛出异常(在chrome控制台中看到)。
还代码
navigator.isOnline
在Chrome扩展中似乎总是返回true,即使网络连接没有打开,所以不能使用。
所以我要么需要一个100%可靠的方法来确定互联网连接是否正常,要么在XMLHttpRequest中找出失败是由于不可用的网络还是域名不存在的事实。
如果XMLHttpRequest类不能用于确定域是否不存在或网络连接断开,我可能必须在每个"真实请求"之前检查互联网连接。Ack !也使用例如www.google.com来检查它不会做,因为谷歌在许多国家被屏蔽。www.microsoft.com可能还行,但不知怎么的,我讨厌这个主意。
任何想法?
如果我理解正确的话…您需要区分互联网故障,或错误的dns。
基本上……你不能,嗯……除非向其他地方提出另一个要求。你所能知道的就是目的地遥不可及。这是因为你无法真正定义"互联网断了"。你是怎么定义的?如果我不能通过我的网关上网就会断网吗?如果有两个支持者一个接一个呢?还是3 ?你说:如果我不能通过3个网关,网络就断了?如果有1000呢?
所以…你最多能做的就是你说过的:向其他事情提出请求。比如microsoft.com,或者example.net等等。你可以提出更多的请求,如果所有的都失败了,那么你可以说所有的都失败了。这允许你说"如果我无法连接到其中任何一个,那么网络就断了"。这确实不是100%可靠,但可能符合您的需要。
关于无效目的地…同样的问题。目的地可能是有效的,但由于某些原因,您可能无法到达。原因可能包括:dns未完全传播,路由关闭等
- Wordpress:替换源(域名)链接
- 我们如何在互联网断开连接或用户关闭选项卡/浏览器时调用注销servlet
- 服务器上的Meteor客户端断开连接事件
- markrwithlabel.js(第三方)原始文件链接断开
- 如何使用Cucumber.js检查断开的链接
- Web 地址虚拟目录会断开外部 JavaScript 链接,因此找不到文件
- Cookie只设置为一个域名,但网站有多个域名
- websocket客户端在发送大数据时断开连接
- 仅验证/接受来自特定域名的电子邮件
- 使用网络服务器的IP地址而不是域名对其进行屏幕抓取
- Will my'新对象'在套接字断开连接时被垃圾收集
- window.scrollTo()与Polymer Project核心滚动标题面板断开
- 断开后拆下插座
- Dynatable与动态HTML标头断开
- 在.settle()(或等效项)中,从Promises数组中断开
- socket.io:断开连接事件 - “传输关闭”、“客户端命名空间断开连接”、“传输错误”和“强制关闭”
- 套接字发生了什么's在'断开连接'事件(服务器端)
- 如何使用正则表达式验证单字母域名
- 如果通过域名或IP地址导航到,则进行检测
- 如何在JavaScript中检测互联网连接是否断开或域名/URL不存在