Wie viele Leute vorgeschlagen haben, ist die Verwendung einer verzögerten Option in Ordnung, solange es Ihnen egal ist, in welcher Reihenfolge deviceready
und mobileinit
in welcher Reihenfolge . Aber in meinem Fall brauchte ich einige pageshow
Ereignisse, als die Anwendung zum ersten Mal geladen wurde, mobileinit
und im weiteren Sinne waren diese pageshow
/ pagebeforeshow
/ etc-Ereignisse Alle feuerten, bevor sie deviceready
fertig 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 mobileinit
beim Laden von JQM sofort ausgelöst wird, habe ich mich für das Laden entschieden, nachdem jQuery.getScript
es deviceready
bereits 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.