地下鉄のユーザー向けに、オフライン対応の HTML 5 Web アプリを構築しています。多くの場合、地下鉄ではモバイル ネットワークが非常に遅いため、ページ リクエストの応答に 1 分以上かかることがあります。ページの読み込みに 10 秒以上かかる場合にオフライン モードに切り替えるオプションをユーザーに提供したいと考えています。
window.location を新しいページに設定する直前に、javascript setTimeout() でこれを実行しようとしました。タイムアウト関数が呼び出されたときにページがまだ存在する場合、これはページに時間がかかりすぎていることを意味し、confirm() ダイアログでユーザーにプロンプトを表示します。ユーザーが [OK] をタップすると、appcache から提供される window.location = '/offline' を設定します。
これはほとんどの場合うまく機能しますが、確認ダイアログが画面に表示されている間に、元のハイパーリンクからの応答が返されることがあります。iOS と Android の両方で、確認ダイアログが表示されると、元のハイパーリンクがページを置き換えるのをブロックしているようです。ただし、iOS では、確認ダイアログを閉じると、オフライン ページではなく、常に元のページに移動します。
おそらく、確認ダイアログをページ上の同様のフローティング HTML ダイアログ ボックスに置き換えることもできますが、ダイアログが表示されている間にページが戻ってきた場合に、ユーザーが応答する変更はまったくありません。
私が本当にやりたいことは、ハイパーリンクのクリックをキャンセルすることです。しかし、これは不可能に思えます。
目的の効果を達成する他の方法はありますか?