如何使用 jQuery 检查是否有 Internet 连接?这样我可以有一些条件说“在生产过程中使用谷歌缓存的 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's spec on offline web apps 的更多信息,但请注意,这在现代网络浏览器中效果最佳,但在旧版网络浏览器上这样做可能无法按预期工作,或者根本无法工作。
另外,向您自己的服务器发出 XHR 请求并不是一种测试连接性的方法。考虑到其他答案之一表明 XHR 的故障点太多,如果您的 XHR 在建立连接时存在缺陷,那么无论如何在日常使用期间它也会存在缺陷。如果您的站点因任何原因无法访问,那么您在同一台服务器上运行的其他服务也可能无法访问。这个决定取决于你。
我不建议向其他人的服务发出 XHR 请求,即使是 google.com。向您的服务器发出请求,或者根本不发出请求。
“在线”是什么意思?
关于“在线”的含义似乎有些困惑。考虑到互联网是一堆网络,但有时您使用的是 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。
关于jquery - 使用 jQuery 检查 Internet 连接是否存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2384167/