Tester si l'ordinateur est connecté à Internet


Il est souvent utile de détecter si une page Web est lue en local ou sur Internet.
Ou bien si Internet lui est accessible.
Ou bien si un serveur distant particulier lui est accessible.

Une solution simple en javascript :
insérer dans la page html un script qui est sur internet, puis tester l'existence d'une variable définie dans ce script.
Par exemple, la page http://jacxl.free.fr/cours_xl/inetok.js contient simplement :
inet=1


On insère le javascript dans notre page html :
<SCRIPT SRC='http://jacxl.free.fr/cours_xl/inetok.js'></SCRIPT>


Il suffit alors de tester la présence ou non de la variable inet dans la page html après chargement du script :
<SCRIPT>if(inet)document.write('y a Web');else document.write('y a pas Web');</SCRIPT>


Résultat :     

Il peut toutefois arriver, malgré un choix judicieux de fichier javascript, que la connexion ne soit pas rapide et que la détection de variable soit lancée avant chargement du fichier javascript. Une connexion internet un peu poussive détectera une fausse absence de connexion.
Pour contourner ce problème, on peut ne faire la détection qu'après un certain délai, supposé laisser à la page js le temps de se charger.
Par exemple pour attendre 2 secondes :
<SCRIPT SRC='http://jacxl.free.fr/cours_xl/inetok.js'></SCRIPT>
<SCRIPT>setTimeout("if(inet)alert('y a Web');else alert('y a pas Web')",2000);</SCRIPT>


On peut limiter le temps d'attente avec une boucle qui s'interromp dès qu'Internet est trouvé :
<SCRIPT>
tmax=new Date().getTime()+2000;
while(!window.inet&&new Date().getTime()<tmax){patiente=0}
if(inet)document.write('y a Web');else document.write('y a pas Web')
</SCRIPT>


Lancer ce bout de script en différé permet d'éviter de retarder le chargement de la page html :
<SCRIPT>
setTimeout("tmax=new Date().getTime()+2000;while(!window.inet&&new Date().getTime()<tmax){patiente=0};if(inet){alert('y a Web')}else{alert('y a pas Web')}",100)
</SCRIPT>


Enfin, si on veut afficher le résultat dans la page, malgré le différé, on peut utiliser une balise <DIV> dans laquelle pourra être inscrit le résultat (cette balise peut d'ailleurs être placée n'importe où dans la page) :
<DIV ID='result'></DIV>
<SCRIPT>
setTimeout("tmax=new Date().getTime()+2000;while(!window.inet&&new Date().getTime()<tmax){patiente=0};if(inet){result.innerText='y a Web'}else{result.innerText='y a pas Web'}",100)
</SCRIPT>


Résultat :     

Le but de la détection d'Internet n'est généralement pas d'afficher un texte. Le javascript peut lancer diverses actions qui seront conditionnées par la présence on non d'une connexion (modification de la page, affichage d' images différentes, redirection de formulaires, de liens...).
Toujours garder à l'esprit que la connexion peut prendre un peu de temps : si on veut un affichage rapide, afficher la page d'abord, tester la présence d'Internet, puis modifier la page html en conséquence.