Обновить / перезагрузить активную вкладку браузера из командной строки?

28

Я пытаюсь настроить собственный набор инструментов, в котором браузер (Firefox или, предпочтительно, Chrome) часто / часто / постоянно вынужден обновляться из командной строки.

(Идея состоит в том, чтобы мгновенно увидеть визуальные изменения в html / webapp, который я редактирую, в соседнем фрейме Emacs - без необходимости постоянно переходить в браузер, чтобы выполнить обновление вручную.)

Самое близкое, куда я зашел, - бежать google-chrome FILE_PATH. Однако это открывает новую вкладку каждый раз.

Есть ли другие подходы?

thomanil
источник
1
Я бы попробовал начать с чего-то вроде Auto Reload .
manatwork
Ах, спасибо тебе за это. Сначала я подумал, что это не нужно, так как это только Mac, но похоже, что на github.com/guard/guard-livereload
thomanil
Firefox, очевидно, может управляться дистанционно , но я не смог заставить его работать. Может быть, вам повезет больше.
15:23

Ответы:

13

Нечто для игры

Он использует xdotool , который позволяет вам создавать сценарии действий для windows / desktop. Если вы зададите имя браузера в качестве аргумента, он найдет и перезагрузит текущую страницу. Вы можете установить браузер по умолчанию, поэтому вам не нужно каждый раз указывать его, и вы можете изменить, отправляете ли вы CTRL-R для перезагрузки или SHIFT-CTRL-R для перезагрузки без кэша.

Он должен перейти в ваш браузер, перезагрузить страницу, а затем вернуться обратно в любое окно, из которого вы вызывали это. Я часто использую это, переводя браузер в фоновый режим, с окном редактора, установленным на «ON-TOP», чтобы он всегда был виден, нажимайте горячую клавишу на этот скрипт или вызывайте его из редактора, и он вернет ваш фокус, когда он будет сделан.

Я - пользователь vim, и я видел, как я выполняю автокоманду, чтобы автоматически запускать этот сценарий всякий раз, когда записывается данный файл, поэтому браузер обновляет при необходимости, я знаю, что вы можете сделать то же самое.

#!/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}
#
lornix
источник
+1 Классная штука! Обратите внимание, что --nameпараметр соответствует строке, отображаемой в заголовке окна, поэтому он не всегда может содержать имя браузера, как в этом примере.
Ребус
@rebus как насчет --class или --classname?
Водолей Сила
6

Ответ @ lornix для меня не совсем сработал (я не уверен почему, возможно, мой оконный менеджер не позволяет xdotool переключать окна). Я написал модифицированную версию, которая должна быть более надежной, это:

  1. Не делает ненужного переключения между окнами
  2. Ограничивает себя видимыми окнами
  3. Обновляет все видимые окна

(Также он использует F5 вместо Ctrl-R, но это только потому, что у меня Ctrl-R привязан к чему-то другому.)

#!/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
источник
Я должен добавить, что это не работает с хромом, и я понятия не имею, почему.
dshepherd
Я люблю видеть хорошо написанный сценарий bash! Кстати, хром работает, если вы используете windowfocus перед клавишей . Конечно, тогда вам придется восстановить предыдущий фокус.
hackerb9
6

Если вы используете Firefox, Auto Reload - это расширение, которое перезагружается при каждом изменении файла. Вы можете добавлять файлы, каталоги или localhost и редактировать фильтры на основе регулярных выражений, чтобы достичь желаемого. Я не знаю никакого дополнения к этому в Chrome. ссылка: https://addons.mozilla.org/en-US/firefox/addon/auto-reload/

RamaPrakasha
источник
1
Больше не работает, к сожалению.
Гринго Суаве
2

Для OS X вы можете использовать этот кусочек applecript:

activate application "Firefox"
tell application "System Events" to keystroke "r" using command down
Wolph
источник