Ligne de commande pour recharger une page dans Chrome

Pour lier le développement Web avec Eclipse JEE en profitant d’un rechargement « automatique » de la page dans Chrome, j’ai testé la solution d’utiliser l’option de démarre de ce dernier avec –remote-debugging-port=9222 .

En premier lieu, il faut configurer le démarrage de Chrome dans Eclipse via le Menu Windows > Preferences. Puis, il faut chercher « Web Browser » et ajouter les réglages dans « Parametres » (d’autres réglages sont présents dans cette copie d’écran)

Une fois que la première URL de déboggage est lancé dans Chrome, on doit trouver l’information sur l’URL de debuggage de l’onglet ouvert via cette ligne de commande sous Windows:

curl http://127.0.0.1:9222/json | findstr "devtoolsFrontendUrl"

ou avec Linux/MacOS

curl http://127.0.0.1:9222/json | grep "devtoolsFrontendUrl"

La réponse devrait être de cette forme:

"devtoolsFrontendUrl": "/devtools/inspector.html?ws=127.0.0.1:9222/devtools/page/33F5C3BF94DE9AC1FC756D161E5E5D6E",

La liaison avec Chrome se fait via une WebSocket indiquée par

ws=127.0.0.1:9222/devtools/page/33F5C3BF94DE9AC1FC756D161E5E5D6E

Pour ouvrir simplement une connexion WebSocket, on peut utiliser le logiciel Websocat (https://github.com/vi/websocat) pour envoyer une commande au Chrome.

echo {"id":0,"method":"Page.reload","params":{"ignoreCache":true}} | websocat_nossl_win64.exe -n1 ws://127.0.0.1:9222/devtools/page/33F5C3BF94DE9AC1FC756D161E5E5D6E

Il y a aussi l’option d’ouvrir une nouvelle page sur une URL

echo {"id":0,"method":"Page.navigate","params":{"url":"http://127.0.0.1:8080/test/LesTodos.jsp"}} | c:\DEV\websocat_nossl_win64.exe -n1 ws://127.0.0.1:9222/devtools/page/33F5C3BF94DE9AC1FC756D161E5E5D6E

Pour déclencher l’appel automatique après la publication d’un projet dans Eclipse, on peut utiliser les Builders.

Dans l’exemple ci-dessus, on utilise un fichier Ant Builder, mais la version avec « Program » peut aussi être utilisé en créant un fichier chrome.cmd à la racine du projet par exemple:

Il faut indiquer donc que le builder « Chrome debug reload » appelle le programme se trouvant dans ${workspace_loc:/test/chrome.cmd}. La seule option qui semble nécessaire dans l’onglet « Build Options » est « During auto-build »

Le contenu du programme chrome.cmd doit être le suivant avec modification du numéro lié à l’URL vue précédemment:

@echo off

ping 127.0.0.1 -n 2 > nul

echo {"id":0,"method":"Page.reload","params":{"ignoreCache":true}} | c:\DEV\websocat_nossl_win64.exe -n1 ws://127.0.0.1:9222/devtools/page/33F5C3BF94DE9AC1FC756D161E5E5D6E > nul 

On peut remarquer la commande ping qui permet d’attendre 2 secondes ici pour laisser le déploiement se faire sur le serveur Tomcat.

Une autre option est de passer par la console des outils de développement Web de chrome pour demander le rechargement de la page. Si les outils de développements Web sont activé dans Chrome on peut trouver un autre WebSocket de communication qui permet donc d’envoyer des commandes à ce dernier.

@echo off

ping 127.0.0.1 -n 2 > nul
echo {"id":0,"method":"Runtime.evaluate","params":{"expression": "history.go()"}} | c:\DEV\websocat_nossl_win64.exe -n1 ws://127.0.0.1:9222/devtools/page/EBE6422FBAE16A0A8A39BB637309DA8D > nul 

On exploite l’envoie de la commande JavaScript history.go() pour recharger la page locale. Il y a plusieurs solutions pour recharger la page dont aussi location.reload() . Au vu d’un problème de retard dans le rechargement de la page, j’ai doublé ces commandes pour être sûr d’avoir la « bonne page » affichée.

J’ai expérimenté avec curl pour faire la liaison en WebSocket mais sans succès pour envoyer les commandes. De la même façon, j’ai trouvé aussi plusieurs utilitaires alternatifs sous Linux/MacOs comme websocat qui semble aussi très bien.

À la fin, j’ai développé un programme complet qui fait normalement l’extraction de l’url correcte :


@echo off
SETLOCAL ENABLEDELAYEDEXPANSION

SET count=1
FOR /F "tokens=* USEBACKQ" %%F IN (`curl -s  http://127.0.0.1:9222/json`) DO (
  SET var!count!=%%F
  SET /a count=!count!+1
)

set str=%var3:"devtoolsFrontendUrl":=%
set str=%str:,= %
set str=%str:"/devtools/inspector.html?=%
set str=%str: =%
set str=%str:"=%
set str=%str:ws=%
set str=!str:~1!
set str=ws://%str%

ping 127.0.0.1 -n 2 > nul
echo {"id":0,"method":"Page.reload","params":{"ignoreCache":true}} | c:\DEV\websocat_nossl_win64.exe -n1 %str% > NUL 

ENDLOCAL

A propos Pierre Jean

Ingénieur de Recherche CERIS Centre d'Enseignement et de Recherche en Informatique et Systèmes IMT Mines Alès UMR Euromov DHM Plus de détails sur Pierre JEAN
Ce contenu a été publié dans IMT Mines Alès. Vous pouvez le mettre en favoris avec ce permalien.