使用jQuery检查是否存在Internet连接?

使用jQuery检查是否存在Internet连接?,jquery,browser,offline,internet-connection,Jquery,Browser,Offline,Internet Connection,如何使用jQuery检查是否存在internet连接?这样我就可以有一些条件说“在生产过程中使用google缓存版本的JQuery,在开发过程中使用该版本或本地版本,具体取决于internet连接”。您可以发送几次XHR请求,如果出现错误,则表示internet连接有问题。5年后版本: var online = navigator.onLine; 今天,如果您不想深入了解本页所描述的不同方法的本质,可以使用JS库 其中最重要的是。它检查预定义URI(默认情况下为favicon)的连接。它会自动

如何使用jQuery检查是否存在internet连接?这样我就可以有一些条件说“在生产过程中使用google缓存版本的JQuery,在开发过程中使用该版本或本地版本,具体取决于internet连接”。

您可以发送几次XHR请求,如果出现错误,则表示internet连接有问题。

5年后版本:

var online = navigator.onLine;
今天,如果您不想深入了解本页所描述的不同方法的本质,可以使用JS库


其中最重要的是。它检查预定义URI(默认情况下为favicon)的连接。它会自动检测用户的连接何时被重新建立,并提供整洁的事件,如
向上
向下
,您可以绑定这些事件以更新UI。

发送XHR请求是不好的,因为如果特定服务器关闭,它可能会失败。相反,使用GooglesAPI库加载jQuery的缓存版本

加载jQuery后,可以使用GooglesAPI执行回调,这将检查jQuery是否已成功加载。类似下面的代码应该可以工作:

<script type="text/javascript">
    google.load("jquery");

    // Call this function when the page has been loaded
    function test_connection() {
        if($){
            //jQuery WAS loaded.
        } else {
            //jQuery failed to load.  Grab the local copy.
        }
    }
    google.setOnLoadCallback(test_connection);
</script>

google.load(“jquery”);
//加载页面后调用此函数
功能测试_连接(){
如果(美元){
//jQuery已加载。
}否则{
//jQuery加载失败。获取本地副本。
}
}
setOnLoadCallback(测试连接);

可以找到google API文档。

针对您的具体情况的最佳选择可能是:

var online = navigator.onLine;
就在关闭标签的前面:

<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>
了解更多有关的信息,但是要知道,这在现代web浏览器中效果最好,在较旧的web浏览器中这样做可能无法按预期工作,或者根本无法工作

或者,对您自己的服务器的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;
  }

}
函数hostReachable(){
//处理IE和更强大的浏览器
var xhr=new(window.ActiveXObject | | XMLHttpRequest)(“Microsoft.XMLHTTP”);
//使用随机参数将新请求作为根主机名的头打开,以破坏缓存
xhr.open(“HEAD”、“/”+window.location.hostname+“/?rand=“+Math.floor((1+Math.random())*0x10000),false);
//发出请求并处理响应
试一试{
xhr.send();
返回(xhr.status>=200&(xhr.status<300 | | xhr.status==304));
}捕获(错误){
返回false;
}
}
你也可以在这里找到这方面的要点:

本地实施的详细信息


有些人评论说,“我总是被错误地返回”。这是因为您可能正在本地服务器上测试它。无论您向哪个服务器发出请求,您都需要能够响应HEAD请求,当然,如果您愿意,可以将其更改为GET。

好的,可能在游戏中有点晚了,但是使用在线图像检查怎么样? 我的意思是,OP需要知道他是否需要获取Google CMD或本地JQ副本,但这并不意味着浏览器无论如何都不能读取Javascript,对吗

<script>
function doConnectFunction() {
// Grab the GOOGLE CMD
}
function doNotConnectFunction() {
// Grab the LOCAL JQ
}

var i = new Image();
i.onload = doConnectFunction;
i.onerror = doNotConnectFunction;
// CHANGE IMAGE URL TO ANY IMAGE YOU KNOW IS LIVE
i.src = 'http://gfx2.hotmail.com/mail/uxp/w4/m4/pr014/h/s7.png?d=' + escape(Date());
// escape(Date()) is necessary to override possibility of image coming from cache
</script>

函数doConnectFunction(){
//抓取谷歌命令
}
函数doNotConnectFunction(){
//抓住当地的JQ
}
var i=新图像();
i、 onload=doConnectFunction;
i、 onerror=doNotConnectFunction;
//将图像URL更改为您知道的任何实时图像
i、 src='1〕http://gfx2.hotmail.com/mail/uxp/w4/m4/pr014/h/s7.png?d=“+escape(Date());
//escape(Date())是覆盖来自缓存的图像的可能性所必需的

只要我的2美分,你就可以模仿Ping命令

使用Ajax向您自己的服务器请求一个时间戳,使用setTimeout定义一个计时器到5秒,如果没有响应,请重试

如果在4次尝试中没有响应,您可以假设internet已关闭

因此,您可以定期使用此例程进行检查,如1或3分钟


这对我来说似乎是一个好的、干净的解决方案。

我为此编写了一个jQuery插件。默认情况下,它会检查当前URL(因为它已经从Web加载过一次),或者您可以指定一个URL用作参数。总是向谷歌提出请求并不是最好的主意,因为它在不同的国家、不同的时间被屏蔽。同样,你也可能会受那天特定海洋/天气锋/政治气候的影响


一个更简单的解决方案:

<script language="javascript" src="http://maps.google.com/maps/api/js?v=3.2&sensor=false"></script>

当不在线时,google脚本将不会加载,从而导致引发异常的错误。

我有一个解决方案,可以在这里检查是否存在internet连接:

$.ajax({
    url: "http://www.google.com",
    context: document.body,
    error: function(jqXHR, exception) {
        alert('Offline')
    },
    success: function() {
        alert('Online')
    }
})

如果他不能先加载jQuery,这将不起作用