Actualiser / recharger l'onglet du navigateur actif à partir de la ligne de commande?

28

J'essaie de mettre en place une chaîne d'outils personnalisée où le navigateur (Firefox ou, de préférence, Chrome) est souvent / fréquemment / constamment forcé de se rafraîchir à partir de la ligne de commande.

(L'idée est de voir instantanément les changements visuels dans le html / webapp que je modifie dans un cadre Emacs adjacent - sans avoir à constamment cliquer sur le navigateur pour effectuer une actualisation manuelle.)

Le plus proche que je suis venu jusqu'ici est de courir google-chrome FILE_PATH. Cependant, cela ouvre un nouvel onglet à chaque fois.

Existe-t-il d'autres approches?

thomanil
la source
1
J'essaierais de partir de quelque chose comme le rechargement automatique .
manatwork
Ah merci pour ça. J'ai d'abord pensé que ce n'était pas possible car il s'agit uniquement de Mac, mais il semble qu'il y ait quelque chose de plus multiplateforme
thomanil
Firefox peut apparemment être télécommandé , mais je n'ai pas pu le faire fonctionner. Vous avez peut-être plus de chance.
amenthes

Réponses:

13

Quelque chose avec lequel jouer

Il utilise xdotool , qui vous permet d'écrire des scripts sur les fenêtres / actions du bureau. Si vous fournissez le nom du navigateur comme argument, il trouvera et rechargera la page actuelle. Vous pouvez définir un navigateur par défaut, vous n'avez donc pas besoin d'en fournir un à chaque fois, et vous pouvez changer si vous envoyez un CTRL-R à recharger, ou SHIFT-CTRL-R à recharger sans cache.

Il devrait retourner à votre navigateur, recharger la page, puis revenir à la fenêtre à partir de laquelle vous avez appelé cela. Je l'utilise souvent en mettant le navigateur en arrière-plan, avec la fenêtre de l'éditeur définie sur `` ON-TOP '' afin qu'il soit toujours visible, raccourcissez ce script ou appelez-le à partir de votre éditeur, et cela vous reviendra lorsque vous aurez terminé.

Je suis un utilisateur de vim, et je pouvais voir faire une autocommande pour déclencher automatiquement ce script chaque fois qu'un fichier donné était écrit, donc le navigateur se rafraîchirait le cas échéant, je sais que vous pouvez faire de même.

#!/bin/bash
#
# L Nix <[email protected]>
# reload browser window
#
# whether to use SHIFT+CTRL+R to force reload without cache
RELOAD_KEYS="CTRL+R"
#RELOAD_KEYS="SHIFT+CTRL+R"
#
# set to whatever's given as argument
BROWSER=$1
#
# if was empty, default set to name of browser, firefox/chrome/opera/etc..
if [ -z "${BROWSER}" ]; then
    BROWSER=firefox
fi
#
# get which window is active right now
MYWINDOW=$(xdotool getactivewindow)
#
# bring up the browser
xdotool search --name ${BROWSER} windowactivate --sync
# send the page-reload keys (C-R) or (S-C-R)
xdotool search --name ${BROWSER} key --clearmodifiers ${RELOAD_KEYS}
#
# sometimes the focus doesn't work, so follow up with activate
xdotool windowfocus --sync ${MYWINDOW}
xdotool windowactivate --sync ${MYWINDOW}
#
lornix
la source
+1 Des trucs sympas! Notez que le --nameparamètre correspond à la chaîne qui est affichée dans la barre de titre de la fenêtre, de sorte qu'il peut ne pas toujours contenir le nom du navigateur comme dans cet exemple ici.
rebus
@rebus qu'en est-il de --class ou --classname?
Aquarius Power
6

La réponse de @ lornix n'a pas vraiment fonctionné pour moi (je ne sais pas pourquoi, peut-être que mon gestionnaire de fenêtres ne permet pas à xdotool de changer de fenêtre). J'ai écrit une version modifiée qui devrait être plus robuste, elle:

  1. Ne fait pas la commutation inutile entre les fenêtres
  2. Se limite aux fenêtres visibles
  3. Actualise toutes les fenêtres visibles

(Il utilise également F5 au lieu de Ctrl-R, mais c'est simplement parce que j'ai Ctrl-R lié à autre chose.)

#!/bin/bash

set -o errexit
set -o nounset

keystroke="CTRL+F5"

# set to whatever's given as argument, defaults to firefox
BROWSER="${1:-firefox}"

# find all visible browser windows
browser_windows="$(xdotool search --sync --all --onlyvisible --name ${BROWSER})"

# Send keystroke
for bw in $browser_windows; do
    xdotool key --window "$bw" "$keystroke"
done
dshepherd
la source
Je devrais ajouter que cela ne semble pas fonctionner avec le chrome, et je n'ai absolument aucune idée pourquoi.
dshepherd
J'adore voir un script bash bien écrit! Soit dit en passant, le chrome fonctionne si vous utilisez windowfocus avant key . Bien sûr, vous devez ensuite restaurer le focus précédent.
hackerb9
6

Si vous utilisez Firefox, Auto Reload est une extension où il se recharge chaque fois que le fichier change. Vous pouvez ajouter des fichiers, des répertoires ou des hôtes locaux et modifier des filtres basés sur des expressions rationnelles afin de réaliser ce que vous voulez. Je ne connais aucun complément à cela dans Chrome. lien: https://addons.mozilla.org/en-US/firefox/addon/auto-reload/

RamaPrakasha
la source
1
Malheureusement, cela ne fonctionne plus.
Gringo Suave
2

Pour OS X, vous pouvez utiliser ce morceau de pomme:

activate application "Firefox"
tell application "System Events" to keystroke "r" using command down
Wolph
la source