从命令行刷新/重新加载活动的浏览器选项卡?


28

我正在尝试建立一个自定义工具链,在该工具链中,浏览器(Firefox或Chrome最好是Chrome)经常/经常/不断地被强制从命令行刷新。

(其想法是立即在相邻的Emacs框架中查看我正在编辑的html / webapp中的视觉变化-无需不断切换至浏览器以进行手动刷新。)

到目前为止我最接近的是跑步google-chrome FILE_PATH。但是,这每次都会打开一个新选项卡。

还有其他方法吗?


1
我会尝试从类似Auto Reload的东西开始。
manatwork 2012年

啊,谢谢你。我首先认为这是不可行的
thomanil

Firefox显然可以被远程控制,但是我无法使其正常工作。也许您的运气更好。
amenthes

Answers:


13

玩的东西

它使用xdotool,它使您可以编写Windows /桌面操作脚本。如果您提供浏览器的名称作为参数,它将找到并重新加载当前页面。您可以设置一个默认的浏览器,因此您不必每次都提供一个浏览器,并且可以更改是发送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呢?
Aquarius Power

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

我喜欢看到写得很好的bash脚本!顺便说一句,如果您在key之前使用窗口焦点,则铬起作用。当然,然后您必须恢复先前的焦点。
hackerb9


2

对于OS X,您可以使用以下applescript:

activate application "Firefox"
tell application "System Events" to keystroke "r" using command down
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.