如何使用Javascript检查互联网连接?这样,我可以有一些条件说“在生产过程中使用Google缓存的JQuery版本,在开发过程中使用该版本或本地版本,具体取决于Internet连接”。
针对您的特定情况的最佳选择可能是:
在您的结束</body>
标记之前:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script>window.jQuery || document.write('<script src="js/vendor/jquery-1.10.2.min.js"><\/script>')</script>
鉴于您的问题集中在jQuery上,这可能是最简单的方法。
如果您想要一个更强大的解决方案,可以尝试:
var online = navigator.onLine;
阅读有关W3C在脱机Web应用程序上的规范的更多信息,但是请注意,这将在现代Web浏览器中最有效,使用较旧的Web浏览器可能无法按预期运行,或者根本无法运行。
另外,向您自己的服务器发出XHR请求并不是测试连接性的一种方法。考虑到其他答案之一表明,XHR的故障点太多,如果您的XHR在建立连接时有缺陷,那么无论如何在常规使用中也有缺陷。如果您的站点由于某种原因无法访问,则在同一服务器上运行的其他服务也可能无法访问。该决定由您决定。
我不建议对此人甚至向google.com提出XHR请求。向您的服务器发出请求,或者根本不发出请求。
关于“在线”的含义似乎有些混乱。考虑互联网是一堆网络,但是有时您使用的是VPN,却无法访问“一般”互联网或万维网。公司通常都有自己的网络,这些网络与其他外部网络的连接受到限制,因此可以将您视为“在线”。正在网上只需要你连接到
一个 网络,你试图连接到服务的不可用性也可达性。
要确定主机是否可以从您的网络访问,可以执行以下操作:
function hostReachable() {
// Handle IE and more capable browsers
var xhr = new ( window.ActiveXObject || XMLHttpRequest )( "Microsoft.XMLHTTP" );
// Open new request as a HEAD to the root hostname with a random param to bust the cache
xhr.open( "HEAD", "//" + window.location.hostname + "/?rand=" + Math.floor((1 + Math.random()) * 0x10000), false );
// Issue request and handle response
try {
xhr.send();
return ( xhr.status >= 200 && (xhr.status < 300 || xhr.status === 304) );
} catch (error) {
return false;
}
}
您也可以在此处找到要点:https://gist.github.com/jpsilvashy/5725579
当地实施细节
有人评论说:“我总是被错误地送回”。那是因为您可能正在本地服务器上对其进行测试。无论您向哪个服务器发出请求,都需要能够响应HEAD请求,当然,如果需要,也可以将其更改为GET。
问题内容: 你如何检查是否可以通过Java连接到Internet?一种方法是: 但是是否有更合适的方法来执行该任务,特别是如果你需要经常进行连续检查并且很有可能断开互联网连接时? 问题答案: 你应该连接到实际应用程序需要的地方。否则,你要测试是否与某个无关的地方(在这种情况下为Google)建立了连接。 特别是,如果你要尝试与Web服务进行通信,并且要控制该Web服务,则最好使用某种廉价的“获取状
我希望代码检查互联网连接,直到连接可用。如果互联网断开,我不希望执行停止。 关于堆栈溢出,很少有检查internet连接的解决方案,但是如果我使用这些解决方案,一段时间后我会得到堆栈溢出错误。 我从以下函数调用该方法: MessagingException:没有路由到主机:Connect;嵌套异常为:java.net.norouteToHostException:没有到主机的路由:连接在com.s
当我试着检查我的iPhone上的互联网连接时,我得到了一堆错误。有谁能帮我修好这个吗? 代码: 代码中的错误: 如果无法读取,则错误1表示: “int”不能转换为“scNetworkReachabilityFlags” 错误2&3: 找不到接受所提供参数的“init”的重载
问题内容: 在Raspberry Pi上安装了NodeJS,是否可以检查rPi是否通过NodeJs连接到Internet? 问题答案: 一种快速而肮脏的方法是检查Node是否可以解决: 这并不是完全万无一失,因为您的RaspPi可以连接到Internet但由于某种原因无法解析,并且您可能还需要检查以区分“无法解析”和“无法连接到名称服务器,因此连接可能下来”)。
问题内容: 如何检查连接是否已在事务中?我正在使用Microsoft SQL Server数据库文件。 问题答案: 经过一番搜索,我发现了另一个“堆栈溢出”问题。事实证明,您不能在ADO.NET中嵌套事务。尝试时,您可能最终会启动两个不相关的事务,这会导致并行事务错误。 要查看连接当前是否在事务中,可以执行以下操作: 这将返回嵌套事务的数量。 请注意,您可以手动嵌套事务,而无需使用SqlTrans
问题内容: 我想知道下面的方法是否可以检查我是否都已连接到网络,并且实际上也可以连接到互联网。 不只是连接到不允许我访问互联网的网络吗? 我认为确实如此,但我不确定100%。 谢谢 问题答案: 通过比较这篇文章中可接受的答案和您的代码,您正在做什么。随意比较代码。最安全的做法是在飞行模式下,关闭WiFi并在远离WiFi的位置进行一些测试,以确保安全。祝好运。