bon, c'est une levée de secret de reprendre un post de bug après 4 mois passés...
c'est JS, et les interpreteurs des navigateurs qui sont en causes.
Quand JS se charge , il se charge en entier ( pour faire simple la page en entier ou rien ),
puis il s'executes, les scripts appliquent les évènements et actions écrites dans leurs codes etc....
La position de ton client.js est mauvaise pour que au chargement de ta page le div hello div se fasses remplacée par 'ok'.
C'est à dire que c'est une lecture séquentielle qui charge la page HTML.
et la position d'un code par rapport à un autre .. au dessus / au dessous , ou avant / après ...
peut faire réussir ou faire échouer ce que tu attendais de ta page Web ...
C'est la même lecture séquentielle qui charges les fichiers CSS...
réalises 40 modifications sur la même balises, pour un seul même attribut CSS ...
c'est la derniere valeur appliquée qui sera visible sur ton écran.
Pour que le script s'executes comme tu le souhaites, tu dois écrire ton script , ou son src="" ... avant d'appeller ta fonction.
Et tu verra en relisant ton code, que tu inclus ta ressource de code JS, après.
Autre point sur le JS, et le DOM,
c'est un objet, un arbre de paramètres, et toute ta page y est écrite.
C'est un DOM qui est lu par ton navigateur.
Et les fonctions JS ( c'est pas une bizarerrie ... ) sont executées au moins une fois, avant que la page s'affiche,
elles sont membres, elles font partie de ce DOM de base... qui est produit lors du chargement de la page.
Pour dire qu'une fonction est chargée et executée en même temps,
ça permet d'avoir une erreur au chargement immédiate...
plutot que d'appeller une fonction qui est mal écrite...
'voulez vous executer le script de cette page .... erreur numéro ....' dans IExplorer ...
des fonctions peuvent être préchargée , donc des résultats 'précalculés' ... pas mal JS ??