画面のロック解除後にiOS8WebアプリでJavaScriptタイマーを再開するにはどうすればよいですか?

ajayel

iOS8では、このHTML5 Webアプリは、画面がロックされ、Webアプリがアクティブで、ホーム画面アイコンから起動された場合にロックが解除された後、jsタイマーを再開しません。iOS7では、タイマーはこの状況で続行されます。画面のロックが解除された後もタイマーを続行する必要があります-これを達成するためのヒントはありますか?

注/共有ボタンからSafariの「ホーム画面に追加」を使用して、最初にWebアプリをホーム画面に追加してください。Safari内でページを実行しても、上記の問題は発生しません。

<html>
<head>
    <meta name="apple-mobile-web-app-capable" content="yes" />
    <title>Test</title>
    <script>
        var tim;
        function go() {
            tim = window.setInterval(action, 1000);
        }
        function action() {
            document.getElementById('x').innerHTML = new Date().getTime().toString();
        }
    </script>
</head>
<body onload="go()">
    <div id="x"></div>
</body>
</html>
TaDaa

最終的に得られたソリューションは、IOS8のスリープモード後に壊れた機能のすべてに対処するのではなく、ajax requests / setTimeout / setInterval / requestAnimationFrameとそれぞれのクリア関数に対処します。

スリープモード後に壊れた他のもの:

  • -webkit-transitionの不透明度により、選択できない領域が発生します
  • キーボードを開いているときにworker.postMessageが呼び出されると、すべてのWebWorkersが完全に強制終了されます
  • ウィンドウのバウンス/パンはすべてのWebWorkersを強制終了する可能性があります。
  • オーバーフロー変更/サイズ変更イベントは機能しなくなりました。それらに依存するロジックを作り直す必要があります。

半実用的なソリューションを作成するには:

  1. setTimeout / setInterval / requestAnimationFrame / clearInterval / clearTimeout / cancelAnimationFrameをオーバーライドします。これらの関数はすべて、WebworkerにpostMessageを送信する必要があり、WebWorkerはそれに応じてsetTimeout / setIntervalを実行します。これらの機能にも一時停止メカニズムを設定する必要があるかもしれませんが、私は100%必要というわけではありません。
  2. XMLHttpRequestをオーバーライドして、sendが呼び出されたときに、要求が実際にWebworkerで実行されるようにします。
  3. すべてのWebworkerの一時停止メカニズムを作成して、メインスレッドがすべてのWebworkerがメッセージをフラッシュしたタイミングを判断できるようにします(基本的に、キーボードが起動しているときにpostMessageがワーカーで呼び出されないようにする必要があります)。
  4. 編集可能な要素でキーボードがポップアップしないようにします。編集可能な要素でタップ/クリックイベントを検出した後、手動でフォーカス関数を呼び出す必要があります。
  5. キーボードを開く編集可能な要素のフォーカス機能を上書きします。フォーカスは一時停止ワーカー関数を呼び出すようになりました。すべてのワーカーが一時停止した後、フォーカスのブラウザー実装を呼び出します。
  6. フォーカスアウトイベントリスナーを編集可能な要素に追加して、ワーカーの再開関数が呼び出されるようにします。

私のgithubには、他の人が利用できる半抽象バージョンがあります。かなり複雑で大規模で、アニメーションとajaxに大きく依存するアプリケーションで、問題がほとんどないgithubバージョンを使用しています。

https://github.com/TaDaa/IOS8-FIX

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

画面のロック/ロック解除時にコマンドまたはスクリプトを実行するにはどうすればよいですか?

分類Dev

画面のロック/ロック解除時にコマンドまたはスクリプトを実行するにはどうすればよいですか?

分類Dev

ネットワークの中断後にリリースアップグレードを再開するにはどうすればよいですか?

分類Dev

後のRedHatバリアントでGnomeの画面ロック解除時間を取得するにはどうすればよいですか?

分類Dev

Awesome WMの画面ロックタイマーを作成するにはどうすればよいですか?

分類Dev

画面のロックが解除されたときにアプリを起動するにはどうすればよいですか?

分類Dev

iOSアプリで特定のレベルをロックおよびロック解除するにはどうすればよいですか?

分類Dev

インターバルをクリアした後、自動的にインターバルを再開するにはどうすればよいですか?

分類Dev

クリップを停止した後、最初から再開するにはどうすればよいですか?

分類Dev

Eclipseで開発されたアプリをiOSアプリのphonegapにアップロードするにはどうすればよいですか?

分類Dev

リモートマシンの画面をロックするにはどうすればよいですか?

分類Dev

ローカルプロバイダーを使用した後、マシンを「クリーンアップ」するにはどうすればよいですか?

分類Dev

非公開後にアプリを再公開するにはどうすればよいですか?

分類Dev

不正なインストール後に開発中のアプリを再インストールするにはどうすればよいですか?

分類Dev

React Nativeで画面のロック解除を検出するにはどうすればよいですか?

分類Dev

iOSタップ後にMKMapViewをMKAnnotationViewコールアウトアクセサリの中央に配置するにはどうすればよいですか?

分類Dev

AzureポータルからWebアプリのアプリケーションインサイトモニタリング(マップ解除)を削除するにはどうすればよいですか?

分類Dev

Androidのロック画面から通知アクションがクリックされたときにプログラムで画面のロックを解除するにはどうすればよいですか?

分類Dev

リリースアップグレードを再開するにはどうすればよいですか?

分類Dev

リリースアップグレードを再開するにはどうすればよいですか?

分類Dev

マップがGoogleマップで再描画された後に形状をクリアするにはどうすればよいですか?

分類Dev

マップマーカーを常に画面の中央に配置するにはどうすればよいですか?アンドロイド

分類Dev

ゲームを再開するために画面へのタップを登録するにはどうすればよいですか

分類Dev

Sitecoreでプログラムでアイテムのクローンを解除して保護を解除するにはどうすればよいですか?

分類Dev

KDE Plasma 5のスクリプトから画面のロックを解除するにはどうすればよいですか?

分類Dev

Java Androidでクリック通知後にアプリを再開するにはどうすればよいですか?

分類Dev

ロック画面をログイン画面のようにするにはどうすればよいですか?

分類Dev

Windows 8でクリックすると常に新しいメモ帳を開くメモ帳のスタート画面アイコンを作成するにはどうすればよいですか?

分類Dev

Pythonでタイマーを使用して条件のブロックを解除するにはどうすればよいですか?

Related 関連記事

  1. 1

    画面のロック/ロック解除時にコマンドまたはスクリプトを実行するにはどうすればよいですか?

  2. 2

    画面のロック/ロック解除時にコマンドまたはスクリプトを実行するにはどうすればよいですか?

  3. 3

    ネットワークの中断後にリリースアップグレードを再開するにはどうすればよいですか?

  4. 4

    後のRedHatバリアントでGnomeの画面ロック解除時間を取得するにはどうすればよいですか?

  5. 5

    Awesome WMの画面ロックタイマーを作成するにはどうすればよいですか?

  6. 6

    画面のロックが解除されたときにアプリを起動するにはどうすればよいですか?

  7. 7

    iOSアプリで特定のレベルをロックおよびロック解除するにはどうすればよいですか?

  8. 8

    インターバルをクリアした後、自動的にインターバルを再開するにはどうすればよいですか?

  9. 9

    クリップを停止した後、最初から再開するにはどうすればよいですか?

  10. 10

    Eclipseで開発されたアプリをiOSアプリのphonegapにアップロードするにはどうすればよいですか?

  11. 11

    リモートマシンの画面をロックするにはどうすればよいですか?

  12. 12

    ローカルプロバイダーを使用した後、マシンを「クリーンアップ」するにはどうすればよいですか?

  13. 13

    非公開後にアプリを再公開するにはどうすればよいですか?

  14. 14

    不正なインストール後に開発中のアプリを再インストールするにはどうすればよいですか?

  15. 15

    React Nativeで画面のロック解除を検出するにはどうすればよいですか?

  16. 16

    iOSタップ後にMKMapViewをMKAnnotationViewコールアウトアクセサリの中央に配置するにはどうすればよいですか?

  17. 17

    AzureポータルからWebアプリのアプリケーションインサイトモニタリング(マップ解除)を削除するにはどうすればよいですか?

  18. 18

    Androidのロック画面から通知アクションがクリックされたときにプログラムで画面のロックを解除するにはどうすればよいですか?

  19. 19

    リリースアップグレードを再開するにはどうすればよいですか?

  20. 20

    リリースアップグレードを再開するにはどうすればよいですか?

  21. 21

    マップがGoogleマップで再描画された後に形状をクリアするにはどうすればよいですか?

  22. 22

    マップマーカーを常に画面の中央に配置するにはどうすればよいですか?アンドロイド

  23. 23

    ゲームを再開するために画面へのタップを登録するにはどうすればよいですか

  24. 24

    Sitecoreでプログラムでアイテムのクローンを解除して保護を解除するにはどうすればよいですか?

  25. 25

    KDE Plasma 5のスクリプトから画面のロックを解除するにはどうすればよいですか?

  26. 26

    Java Androidでクリック通知後にアプリを再開するにはどうすればよいですか?

  27. 27

    ロック画面をログイン画面のようにするにはどうすればよいですか?

  28. 28

    Windows 8でクリックすると常に新しいメモ帳を開くメモ帳のスタート画面アイコンを作成するにはどうすればよいですか?

  29. 29

    Pythonでタイマーを使用して条件のブロックを解除するにはどうすればよいですか?

ホットタグ

アーカイブ