webで検索するとだいたい`navigator.onLine`を使えと書いてあるが、これは現在通信できるかどうかを判定できるものではなく、アプリケーションを開いた時の通信状態が戻る。同様に、window.ononline/onofflineもちゃんと発生しないようだ。
(androidのchromeで確認した挙動)
`navigator.onLine`は通信ができるかどうかの状態を反映しない場合があるため、下記のように実際通信してみてタイムアウトしたかどうかで判定するとよいと思う。
function getCurrentOnline(callback) { // キャッシュ無効で適当なページを取得してみる $.ajax("./onlineTest.html", { type: "get", cache: false, timeout: 3 * 1000 } ).then(function() { // 通信成功=オンライン callback(true); }, function(){ // 通信失敗=オフライン callback(false); }); }