一个更通用的解决方案
仅使用Javascript似乎无法解决这个问题。在浏览器重新添加以前支持此功能之前,我认为没有完美的通用解决方案。
虽然我认为我之前的Emacs解决方案很好,但是对于那些没有内置Web服务器的文本编辑器用户,这里有另一个更广泛的答案。
使用inotifywait
许多操作系统可以设置程序在文件修改时执行,而无需轮询。并非所有操作系统都有一种API,但Linux的inotify比大多数OSes都要好,并且易于使用。
以下是一个Shell脚本,在您的HTML和CSS文件所在的目录中运行时,将告诉Firefox在保存更改时重新加载。如果您只想监视几个文件,则还可以使用特定的文件名调用它。
#!/bin/bash
set -o errexit
set -o nounset
browser="firefox"
keystroke="CTRL+F5"
sendkey() {
xdotool search --all --onlyvisible --class "$1" \
key --window %@ "$2"
}
if [[ "${1:-}" == -* ]]; then
browser="${1##*-}"
shift
fi
if [[ $# -eq 0 ]]; then
echo "Watching all files under `pwd`"
set - --recursive "`pwd`"
fi
inotifywait --monitor --event CLOSE_WRITE "$@" | while read; do
sendkey $browser $keystroke
done
先决条件:inotifywait 和 xdotool
为了使这个操作生效,你需要安装 inotifywait
和 xdotool
。在 Debian GNU/Linux(以及其派生版,如 Ubuntu 和 Mint)中,你可以使用一个命令获取这些程序:
sudo apt install inotify-tools xdotool
可选:使用Chromium
由于Chromium(和Chrome)在没有焦点的窗口中处理输入的方式很奇怪,我建议使用Firefox。如果您非常需要使用Chromium,可以使用此sendkey()
例程代替:
sendkeywithfocus() {
local current_focus="$(xdotool getwindowfocus)"
xdotool search --all --onlyvisible --class "$1" \
windowfocus \
key --window %@ "$2"
xdotool windowfocus "$current_focus"
}
可选项:在Wayland下工作
我没有进行过测试,但是读到现在Wayland有一个叫做ydotool
的程序,它可以代替xdotool
。
file:///
协议的文件。如果你将它们在localhost
或其他地方本地服务,那应该没问题。 - Herohtar