web-dev-qa-db-ja.com

インターネット接続がJavascriptで存在するかどうか確認しますか。

Javascriptを使ってインターネットに接続されているかどうかをどうやって確認しますか?そうすれば、「インターネット接続に応じて、GoogleのキャッシュバージョンのJQueryをプロダクション中に使用し、開発時にはそのバージョンまたはローカルバージョンのいずれかを使用する」という条件付き条件を設定できます。

200
Lance Pollard

あなたの特定のケースに最適なオプションは次のようになります。

閉じる</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;

オフラインWebアプリケーションに関するW3Cの仕様 についての詳細を読んでください。ただし、これは現代のWebブラウザでは最もうまく機能します。古いWebブラウザでは期待どおりに機能しない、またはまったく機能しないことがあります。

あるいは、あなた自身のサーバーへのXHRリクエストは、あなたの接続性をテストするための方法としてはそれほど悪くありません。他の答えの1つを考慮すると、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に変更することもできます。

253
JP Silvashy

わかりました、多分もう少し遅れてゲームですが、オンライン画像でチェックすることについてはどうですか?つまり、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>

たった2セント

37
morespace54

5年後のバージョン:

このページで説明されているさまざまな方法の詳細に触れたくないのであれば、今日ではあなたのためのJSライブラリーがあります。

そのうち https://github.com/hubspot/offline です。それは事前に定義されたURI、デフォルトであなたのfaviconの接続性をチェックします。ユーザーの接続が再確立されたことを自動的に検出し、updownなどのきちんとしたイベントを提供します。これをバインドすることでUIを更新できます。

13
Phil Rykoff

Pingコマンドをまねることができます。

Ajaxを使用して自分のサーバーにタイムスタンプを要求し、setTimeoutを使用して5秒にタイマーを定義します。応答がない場合は、もう一度試してください。

4回試行しても応答がない場合は、インターネットが停止していると考えられます。

ですから、このルーチンを使って1分から3分といった定期的な間隔でチェックすることができます。

それは私にとって良い、きれいな解決策のようです。

5
Vitim.us

XHRリクエストを数回送信して試すことができます。エラーが発生した場合は、インターネット接続に問題があることを意味します。

編集: 私は このJQueryスクリプト あなたが求めていることをやっていますが、私はテストしませんでした。

1
Soufiane Hassou

これを行うためのjQueryプラグインを書きました。デフォルトでは現在のURLをチェックします(すでにWebからロードされているため)、または引数として使用するURLを指定できます。常にGoogleにリクエストを送信するのは、さまざまな国で異なる時間帯にブロックされるため、最善の方法ではありません。また、あなたは、特定の海/天気の前線/政治的な気候を越えたつながりがその日のようになっているかもしれないということに憐れんでいるかもしれません。

http://tomriley.net/blog/archives/111

0
tripRev