Quando un dispositivo iOS 8 che esegue un'applicazione Web (ad esempio lanciato da un collegamento sulla schermata iniziale) restituisce dallo stato di sospensione tutte le richieste web asincrone fatte non attivano il Callback OnUpdateReady.iOS 8 Bug - OnUpdateReady non ha mai chiamato di nuovo quando il dispositivo ritorna dallo stato di riposo
Il problema è abbastanza semplice da riprodurre: è sufficiente inserire i due file di codice in basso su qualsiasi server Web e provarlo.
Qualcun altro si è imbattuto in questo problema? Se è così c'è qualche soluzione?
Sto postando questo per cercare di attirare l'attenzione su questo bug in iOS 8 che ha praticamente rovinato tutte le mie applicazioni web - abbiamo dovuto raccomandare di NON aggiornare oltre iOS 7. E sì, ho postato il problema su Apple Bug Reporter ma penso che nessuno li stia guardando da molto tempo.
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>
Solo per far sapere a chiunque sia interessato - Apple ha chiuso il mio bug report con il seguente commento; "L'ingegneria ha stabilito che la segnalazione del bug è un duplicato di un altro problema (n. 18042389) e verrà chiusa." Tuttavia, il sistema di segnalazione dei bug di Apple non mi consente di visualizzare l'altro problema, quindi non ho idea se sia davvero lo stesso o se stiano semplicemente scaricando questo problema. Inoltre, a partire da iOS 8.0.2 il problema persiste ancora. – jrg
Apple ha fatto lo stesso con il mio bug, non ha idea di quale sia lo stato di 18042389. ripubblicherà lo stesso bug fino a quando non mi bannano, poi tweet su di essere bannato - al momento non riesco a pensare ad altro modo –
Un altro aggiornamento iOS8 (8.1) e ancora nessuna gioia - il problema continua. Ho segnalato di nuovo il bug questa volta specifico per iOS 8.1 e incluso un collegamento a questo articolo. Speriamo che Apple prenda nota presto. – jrg