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

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

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

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

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

还有其他方法吗?

答案1

有东西可以玩

它用xdo工具,它允许您编写窗口/桌面操作的脚本。如果您提供浏览器的名称作为参数,它将查找并重新加载当前页面。您可以设置默认浏览器,这样您就不需要每次都提供一个,并且您可以更改是发送 CTRL-R 来重新加载,还是发送 SHIFT-CTRL-R 来重新加载而不使用缓存。

应该翻转到浏览器,重新加载页面,然后翻转回您从中调用的任何窗口。我经常使用此功能,将浏览器置于后台,将编辑器窗口设置为“ON-TOP”,以便它始终可见,热键此脚本,或从编辑器中调用它,完成后它将返回您的焦点。

我是一名 vim 用户,我可以看到制作一个自动命令,以便在写入给定文件时自动触发此脚本,这样浏览器就会在适当的时候刷新,我知道你也可以这样做。

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

答案2

@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

答案3

如果您使用的是 Firefox,“自动重新加载”是一个扩展,只要文件发生更改,它就会重新加载。您可以添加文件、目录或本地主机并编辑基于正则表达式的过滤器,以便实现您想要的效果。我不知道 Chrome 中对此有何补充。关联:https://addons.mozilla.org/en-US/firefox/addon/auto-reload/

答案4

对于 OS X,你可以使用这段 applescript:

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

例如,通过从终端执行它:

osascript \
  -e 'activate application "Firefox"' \
  -e 'tell application "System Events" to keystroke "r" using command down'

相关内容