Gdy urządzenie z systemem iOS 8, na którym działa aplikacja internetowa (tj. Uruchamiane ze skrótu na ekranie głównym), wraca ze stanu wstrzymania, wszystkie asynchroniczne żądania sieciowe nie uruchamiają Oddzwanianie OnUpdateReady.Błąd systemu iOS 8 - OnUpdateReady nigdy nie było wywoływane ponownie po powrocie urządzenia ze stanu uśpienia
Problem jest dość łatwy do odtworzenia - wystarczy umieścić dwa poniższe pliki kodu na dowolnym serwerze WWW i spróbować.
Czy ktoś inny napotkał ten problem? Jeśli tak, to czy istnieją jakieś obejścia?
Zamieszczam to, aby spróbować zwrócić uwagę na ten błąd w systemie iOS 8, który zasadniczo zrujnował wszystkie moje aplikacje internetowe - musieliśmy zalecić NIE uaktualnianie systemu poza iOS 7. I tak, napisałem problem z Apple Bug Reporterem, ale myślę, że nikt na nie nie patrzy, ponieważ minęło dużo czasu.
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>
Po prostu, aby umożliwić wszystkim, którzy są zainteresowani wiedzą - Apple Closed mój raport o błędzie z następującym komentarzem; "Inżynieria ustaliła, że zgłoszenie błędu jest duplikatem innego problemu (# 18042389) i zostanie zamknięte." Jednak system zgłaszania błędów Apple nie pozwala mi na obejrzenie drugiego problemu, więc nie mam pojęcia, czy to naprawdę jest to samo, czy po prostu dezorientują ten problem. Ponadto, od wersji iOS 8.0.2 problem nadal występuje. – jrg
Apple zrobił to samo z moim błędem, nie mam pojęcia, jaki jest status 18042389. odtworzy ten sam błąd, dopóki mnie nie zbanują, a następnie tweetują o byciu zbanowanym - nie można wymyślić innego sposobu obecnie –
Kolejna aktualizacja iOS8 (8.1) i wciąż nie ma radości - problem nadal trwa. Znowu zgłosiłem błąd związany z iOS 8.1 i umieściłem link do tego artykułu. Mam nadzieję, że Apple wkrótce zauważy. – jrg