Dies kann mit der sleep-Methode von Java geschehen. Ich habe es in Firefox und Internet Explorer getestet und es blockiert den Computer nicht, frisst keine Ressourcen und verursacht keine endlosen Serverzugriffe. Es scheint mir eine saubere Lösung zu sein.
Zuerst müssen Sie Java auf die Seite laden und seine Methoden verfügbar machen. Um das zu tun, habe ich dies getan:
<html>
<head>
<script type="text/javascript">
function load() {
var appletRef = document.getElementById("app");
window.java = appletRef.Packages.java;
} // endfunction
</script>
<body onLoad="load()">
<embed id="app" code="java.applet.Applet" type="application/x-java-applet" MAYSCRIPT="true" width="0" height="0" />
Wenn Sie eine schmerzfreie Pause in Ihrem JavaScript-Code wünschen, müssen Sie nur noch Folgendes tun:
java.lang.Thread.sleep(xxx)
Dabei ist xxx die Zeit in Millisekunden. In meinem Fall (als Rechtfertigung) war dies Teil der Back-End-Auftragsabwicklung in einem sehr kleinen Unternehmen, und ich musste eine Rechnung drucken, die vom Server geladen werden musste. Dazu lud ich die Rechnung (als Webseite) in einen iFrame und druckte dann den iFrame.
Natürlich musste ich warten, bis die Seite vollständig geladen war, bevor ich drucken konnte, also musste der JavaScript-Code eine Pause einlegen. Ich habe dies erreicht, indem ich die Rechnungsseite (im iFrame) ein verstecktes Formularfeld auf der übergeordneten Seite mit dem onLoad-Ereignis ändern ließ. Und der Code auf der übergeordneten Seite, um die Rechnung zu drucken, sah wie folgt aus (irrelevante Teile aus Gründen der Übersichtlichkeit abgeschnitten):
var isReady = eval('document.batchForm.ready');
isReady.value = 0;
frames['rpc_frame'].location.href = url;
while (isReady.value == 0) {
java.lang.Thread.sleep(250);
} // endwhile
window.frames['rpc_frame'].focus();
window.frames['rpc_frame'].print();
Der Benutzer drückt also auf die Schaltfläche, das Skript lädt die Rechnungsseite, wartet, prüft jede Viertelsekunde, ob die Rechnungsseite fertig geladen ist, und öffnet das Druckdialogfeld, damit der Benutzer sie an den Drucker senden kann. QED.