JavaScript/ネットワーク状態を取得する

JavaScript/ネットワーク状態を取得する

ダミー画像を使っての検知

Tips ネットワーク編 サーバー接続をチェックする 1 [Javascript] All About

画像のonLoadやonErrorに仕込めばお手軽でいいかも。

コールバックでキック

実装してないけど多分

  • ネットワーク切れていた場合の処理をsetTimeoutでタイムアウト指定時間後に発火するように予約
  • ネットワーク確認用scriptローディング
  • ネットワーク確認用scriptがロードできた
  • ネットワーク確認用script中に書かれている関数で正常処理がキック
  • 正常処理で切れていた場合の処理をキャンセル、本来の処理を実行
  • ネットワーク確認用scriptがロードできなかった
  • 指定通りタイムアウト指定時間後にネットワーク切れていた場合の処理が発火

こんなんでいいような気がするわ

これならネットワークが繋がっている場合は正常系が即実行される。

サンプルコード

  • Android 2.3.4の実機
  • Windows版Firefox9

で動作確認

元のHTML

<html>
    <head>
        <title>hoge</title>
    </head>
    <body>
        <div onclick="hogehoge();">click</div>
        <script src="a.js"></script>
    </body>
</html>

元のHTMLから呼び出されるお膳立て用スクリプト

a.js
var timer;
function hogehoge(){
    timer = setTimeout(piyopiyo, 5000);
    var scriptB = document.createElement("script");
    scriptB.src = "b.js?" + Math.random();
    var head = document.getElementsByTagName("head")[0];
    head.appendChild(scriptB);
}
function piyopiyo(){
    alert("disconnect");
}
function fugafuga(){
    clearTimeout(timer);
    alert("connect");
}

疎通確認用に使うコールバックが記述されているスクリプト

b.js
fugafuga();

window.navigator.onLineを使う

window.navigator.onLineというプロパティからネットワーク状態を取得できるらしい。 つながっていたらtrue、切れていたらfalse・・・らしい

ということだがこれはかなり怪しいというか意味が無い。 まず挙動が実装系やそのバージョンによってバラバラ。PCのブラウザは常にtrueを示したり、Androidだとバージョンによって状態が違ったりと。

そもそもネットワークってのは単に繋がっているだけじゃ意味が無い、欲しいデータがあるサーバに繋がりを確認できないと意味が無い。

Android端末をWiMAX端末に無線LAN接続している場合はどうだろう?WiMAXの電波が切れていてもAndroid端末はWiMAXとはネットワークが繋がっているのだからAndroidから見ればネットワークは繋がっている。しかしWiMAXが切れているのだからやっぱり目的は達成できない。

これ意味あんのか?

バージョンと製造年月日

2012-04-05

タグ

javascript/get_network_state.txt · 最終更新: 2012-04-13 10:19 by ore