Оновити / перезавантажити активну вкладку браузера з командного рядка?


28

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

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

Найближчий я прийшов поки що - бігати google-chrome FILE_PATH. Однак це відкриває нову вкладку кожного разу.

Чи є інші підходи?


1
Я б спробував почати з чогось на зразок Автозавантаження .
манатура

Ах, дякую за це. Я вперше подумав, що це непрохідність,
thomanil

Firefox може бути дистанційно керованим , але я не міг змусити його працювати. Можливо, вам пощастить більше.
амент

Відповіді:


13

Щось пограти

Він використовує xdotool , який дозволяє вам сценарій вікон / дій на робочому столі. Якщо ви введете ім'я браузера в якості аргументу, він знайде та перезавантажить поточну сторінку. Ви можете встановити браузер за замовчуванням, тому вам не потрібно кожного разу вводити його, і ви можете змінити, чи надсилаєте 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}
#

+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

Я повинен додати, що це, здається, не працює з хромом, і я абсолютно не маю поняття, чому.
дшеферд

Я люблю бачити добре написаний баш сценарій! До речі, хром працює, якщо ви використовуєте вікно фокусування перед клавішею . Звичайно, тоді вам доведеться відновити попередній фокус.
hackerb9

6

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


1
Більше не працює.
Gringo Suave

2

Для OS X ви можете використовувати цей біт яблучного сценарію:

activate application "Firefox"
tell application "System Events" to keystroke "r" using command down
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.