iOS 8 Bug - OnUpdateReady wird nie wieder aufgerufen, wenn das Gerät aus dem Ruhezustand zurückkehrt

Wenn ein iOS 8-Gerät, auf dem eine Webanwendung ausgeführt wird (d. H. Über eine Verknüpfung auf dem Startbildschirm gestartet), aus dem Ruhezustand zurückkehrt, können alle ausgeführten asynchronen Webanforderungen den OnUpdateReady-Rückruf nicht auslösen.

Das Problem ist recht einfach zu reproduzieren - einfach die beiden folgenden Codedateien auf einen beliebigen Webserver kopieren und ausprobieren.

Hat jemand anderes auf dieses Problem gestoßen? Wenn ja, gibt es Abhilfemaßnahmen?

Ich poste dies, um die Aufmerksamkeit auf diesen Fehler in iOS 8 zu lenken, der im Wesentlichen alle meine Webanwendungen ruiniert hat. Wir mussten empfehlen, NICHT über iOS 7 hinaus zu aktualisieren. Und ja, ich habe das Problem auf gepostet Apple Bug Reporter, aber ich glaube, niemand schaut sich diese an, da es eine lange Zeit her ist.

app.manifest

CACHE MANIFEST
# 2014-09-24 - Test

CACHE:
default.html

default.html

<!DOCTYPE html>
<html manifest="app.manifest">
<head>
  <title>Test Harness</title>
  <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"/>
  <meta name="HandheldFriendly" content="true" />
  <meta name="apple-mobile-web-app-capable" content="yes" />
  <meta name="apple-mobile-web-app-status-bar-style" content="black" />
  <script language="javascript" type="text/javascript">
    var Test = new function () {
      var _GetEnd = function (oResult) {
        var sResult = ': ' +
          ((oResult.Value === true)
            ? 'Success'
            : 'Failure<br>' + oResult.Reason) +
          '<br>';

        var oLog = document.getElementById('idLog');
        oLog.innerHTML = (new Date()) + sResult + oLog.innerHTML

        setTimeout(_GetBegin, 1000);
      };

      var _GetBegin = function () {
        var sURL = 'app.manifest';
        var hAsyncCallback = _GetEnd;

        try {
          var oRequest = new XMLHttpRequest();
          oRequest.onreadystatechange =
            function () {
              if (oRequest.readyState != 4) return;
              if (oRequest.status != 200) {
                hAsyncCallback({ Value: false, Reason: oRequest.responseText });
              } else {
                hAsyncCallback({ Value: true, Reason: null });
              }
            };
          oRequest.open('GET', sURL, true);
          oRequest.send(null);
        } catch (e) {
          alert('Critical Error: ' + e.message );
        }
      };

      this.Start = function () { _GetBegin(); }
    };
  </script>
</head>
<body onload="Test.Start();">
  <ol>
    <li>Put both app.manifest and default.html on a web server.</li>
    <li>Make sure this page is being launched from the Home screen as a web application.</li>
    <li>Press the sleep button while it is running.</li>
    <li>Press the wake button and unlock the phone to get back to this screen.</li>
    <li>Under iOS7x the page continues, under iOS8 the onreadystatechange never gets called again.</li>
  </ol>
  <div id="idLog"></div>
</body>
</html>

Antworten auf die Frage(6)

Ihre Antwort auf die Frage