Wie viele Leute vorgeschlagen haben, ist die Verwendung einer verzögerten Option in Ordnung, solange es Ihnen egal ist, in welcher Reihenfolge devicereadyund mobileinitin welcher Reihenfolge . Aber in meinem Fall brauchte ich einige pageshowEreignisse, als die Anwendung zum ersten Mal geladen wurde, mobileinitund im weiteren Sinne waren diese pageshow/ pagebeforeshow/ etc-Ereignisse Alle feuerten, bevor sie devicereadyfertig waren, so dass ich mich nicht richtig an sie binden konnte, indem ich sie aufschob. Diese Rennbedingung war keine gute Sache.
Was ich tun musste, war sicherzustellen, dass 'mobileinit' erst stattfand, nachdem ' deviceready' bereits gefeuert wurde. Da es mobileinitbeim Laden von JQM sofort ausgelöst wird, habe ich mich für das Laden entschieden, nachdem jQuery.getScriptes devicereadybereits fertig war.
<script src="cordova-2.2.0.js"></script>
<script src="js/jquery-1.8.2.min.js"></script>
<script src="js/async.min.js"></script>
<script src="js/app.js"></script>
<script>
document.addEventListener(
'deviceready',
function () {
$('body').css('visibility', 'hidden');
$(document).one("mobileinit", function () {
app.init();
$('body').css('visibility', '');
});
$.getScript('js/jquery.mobile-1.2.0.min.js');
},
false
);
</script>
Der Grund, warum ich den Körper verstecke, ist, dass ein Nebeneffekt dieser Methode eine halbe Sekunde der Sichtbarkeit des ursprünglichen HTML-Dokuments ist, bevor jquery.mobile geladen wird. In diesem Fall wird das Ausblenden einer zusätzlichen halben Sekunde des leeren Speicherplatzes dem Anzeigen des nicht gestalteten Dokuments vorgezogen.