Hallo Jurgen,
das blockierende Verhalten ist in diesem Fall gewollt.
Da habe ich auch keine Ahnung. Wie lange hast du denn gewartet?
Gewartet habe ich 10 Sekunden. Der Rest der Seite war längst aufgebaut (ich habe zum Test nach dem Aufruf der Funktion setTimeout() noch eine Ausgabe direkt in die Seite über den <p>-Tag eingebaut).
Aber da du nicht weist, wie schnell der Rechner des Besuchers, die Internetverbindung oder der Server sind, ist setTimeout zum Warten auf onload immer eine schlechte Idee.
Die Nutzung der Funktion setTimeout() sollte nur zur Problemanalyse dienen und zeigen, dass es sich hierbei um ein Problem handelt, das durch asynchrones Laden hervorgerufen wird. Anscheinend tritt hier jedoch noch ein anderer Effekt zu Tage, der der erwarteten Ausführung einen Strich durch die Rechnung zieht.
Gruß,
WD_2012