Atualizar / recarregar a guia ativa do navegador na linha de comando?


28

Estou tentando configurar uma cadeia de ferramentas personalizada em que o navegador (Firefox ou, preferencialmente, Chrome) é frequentemente / frequentemente / constantemente forçado a atualizar a partir da linha de comando.

(A idéia é ver instantaneamente as alterações visuais no html / webapp que estou editando em um quadro Emacs adjacente - sem ter que procurar constantemente o navegador para fazer uma atualização manual.)

O mais próximo que cheguei até agora é de correr google-chrome FILE_PATH. No entanto, isso abre uma nova guia sempre.

Existem outras abordagens?


1
Eu tentaria começar de algo como o Auto Reload .
manatwork

Ah, obrigado por isso. A primeira vez que pensei que este foi um não-go, desde a sua Mac apenas, mas parece que há algo mais crossplatform em github.com/guard/guard-livereload
thomanil

Aparentemente, o Firefox pode ser controlado remotamente , mas não consegui fazê-lo funcionar. Talvez você tenha melhor sorte.
amenthes

Respostas:


13

Algo para brincar

Ele usa o xdotool , que permite script de ações do windows / desktop. Se você fornecer o nome do navegador como argumento, ele encontrará e recarregará a página atual. Você pode definir um navegador padrão, para que não precise fornecer um a cada vez, e pode alterar se envia um CTRL-R para recarregar ou SHIFT-CTRL-R para recarregar sem cache.

Ele deve virar para o seu navegador, recarregar a página e voltar para a janela da qual você chamou isso. Eu uso isso frequentemente colocando o navegador em segundo plano, com a janela do editor definida como 'ON-TOP', para que fique sempre visível, ative esse script com chave de atalho ou chame-o pelo seu editor e ele retornará seu foco quando terminar.

Eu sou um usuário do vim e pude ver fazendo um autocommand para disparar automaticamente esse script sempre que um determinado arquivo fosse gravado, para que o navegador fosse atualizado quando apropriado, eu sei que você pode fazer o mesmo.

#!/bin/bash
#
# L Nix <lornix@lornix.com>
# 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}
#

+1 Coisas legais! Observe que o --nameparâmetro corresponde à string exibida na barra de título da janela, portanto nem sempre pode conter o nome do navegador, como neste exemplo aqui.
rebus

@rebus e quanto a --class ou --classname?
Poder de Aquário

6

A resposta do @ lornix não funcionou muito bem para mim (não sei por que, possivelmente meu gerenciador de janelas não permite que o xdotool mude de janela). Eu escrevi uma versão modificada que deveria ser mais robusta:

  1. Não faz a alternância desnecessária entre janelas
  2. Limita-se a janelas visíveis
  3. Atualiza todas as janelas visíveis

(Também usa F5 em vez de Ctrl-R, mas é só porque eu tenho Ctrl-R ligado a outra coisa.)

#!/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

Devo acrescentar que isso não parece funcionar com cromo e não faço a menor idéia do porquê.
precisa saber é o seguinte

Eu amo ver um script bash bem escrito! A propósito, o cromo funciona se você usar o foco na janela antes da tecla . Obviamente, você precisará restaurar o foco anterior.
hackerb9 11/11


2

Para o OS X, você pode usar este bit de scripts:

activate application "Firefox"
tell application "System Events" to keystroke "r" using command down
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.