1. ホーム
  2. jquery

[解決済み】jQueryでインターネット接続があるかどうか確認する?重複

2022-04-07 16:21:53

質問

jQueryを使ってインターネットに接続されているかどうかを確認するにはどうすればよいのでしょうか? そうすれば、「本番ではGoogleキャッシュ版のJQueryを使用し、開発時にはインターネット接続状況に応じてそのバージョンまたはローカルバージョンのいずれかを使用する」という条件分岐を設定することができます。

解決方法は?

あなたのケースに最適なオプションは、次のとおりです。

クローズ直前 </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の仕様 しかし、これは最新のウェブブラウザで最もよく機能します。古いウェブブラウザでこれを行うと、期待通りに、またはまったく機能しない可能性があることに注意してください。

あるいは、自分のサーバーへのXHRリクエストは、接続性をテストする方法としてそれほど悪いものではありません。他の回答で、XHRには失敗するポイントが多すぎると書かれていることを考えると、もしXHRが接続を確立するときに欠陥があれば、日常的に使用するときにも欠陥があるはずです。もしあなたのサイトが何らかの理由でアクセス不能になった場合、同じサーバで動いている他のサービスもおそらくアクセス不能になるでしょう。その判断はあなた次第です。

他人のサービス、それもgoogle.comにXHRリクエストをするのはお勧めしません。自分のサーバーにリクエストするか、まったくリクエストしないかです。

オンラインとはどういう意味ですか?

オンラインであることの意味について、いくつかの混乱があるようです。インターネットはネットワークの集まりですが、時にはVPNを利用していて、インターネットやワールドワイドウェブにアクセスできないこともあります。多くの場合、企業は、他の外部ネットワークへの接続が制限されている独自のネットワークを持っているため、あなたは&quot;オンライン&quot;と見なされる可能性があります。オンラインであることは、以下のネットワークに接続されていることのみを意味します。 a ネットワークに接続できるかどうかではなく、接続しようとしているサービスが利用可能かどうか、またそのサービスに到達できるかどうかです。

あるホストがネットワークから到達可能かどうかを判断するには、次のようにすればよいでしょう。

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;
  }

}

また、そのためのGistはこちらにあります。 https://gist.github.com/jpsilvashy/5725579

ローカル実装の詳細

いつもfalseを返される」というご意見があります。それは、おそらくあなたのローカル・サーバーでテストしているからでしょう。どのサーバにリクエストするにしても、HEAD リクエストに応答できる必要があります。