我正在Vim中编辑HTML文件,并且希望浏览器在下面的文件发生更改时刷新。
是否有适用于Google Chrome的插件,该插件会在每次将更改保存到文件时侦听文件更改并自动刷新页面?我知道有适用于Firefox的XRefresh,但我根本无法运行XRefresh。
编写脚本自己完成这项工作有多困难?
我正在Vim中编辑HTML文件,并且希望浏览器在下面的文件发生更改时刷新。
是否有适用于Google Chrome的插件,该插件会在每次将更改保存到文件时侦听文件更改并自动刷新页面?我知道有适用于Firefox的XRefresh,但我根本无法运行XRefresh。
编写脚本自己完成这项工作有多困难?
Answers:
我假设您不在OSX上?否则,您可以使用applescript执行以下操作:
http://brettterpstra.com/watch-for-file-changes-and-refresh-your-browser-automatically/
chrome还有一个名为“自动刷新加”的插件,您可以在其中指定每x秒重新加载一次:
keyword
以watch_keyword
在以下行:if (URL of atab contains "#{keyword}") then
纯JavaScript解决方案!
只需将以下内容添加到您的<head>
:
<script type="text/javascript" src="http://livejs.com/live.js"></script>
怎么样?仅包含Live.js,它将通过向服务器发送连续的HEAD请求来监视当前页面,包括本地CSS和Javascript。对CSS的更改将动态应用,并且HTML或Javascript更改将重新加载页面。试试吧!
哪里?除非另外证明,否则Live.js可以在Firefox,Chrome,Safari,Opera和IE6 +中运行。Live.js与您使用的开发框架或语言无关,无论它是Ruby,Handcraft,Python,Django,NET,Java,Php,Drupal,Joomla还是您所需要的。
我从这里几乎逐字复制了此答案,因为我认为它比此处当前接受的答案更容易,更笼统。
php -S localhost:8080
python3 -m http.server
,还有更多的其他语言/工具。
Tincr是一个Chrome扩展程序,只要其下的文件发生更改,它就会刷新页面。
假设您已安装fswatch(brew install fswatch
),则适用于OS X的Handy Bash一线软件。它监视任意路径/文件,并在发生更改时刷新活动的Chrome选项卡:
fswatch -o ~/path/to/watch | xargs -n1 -I {} osascript -e 'tell application "Google Chrome" to tell the active tab of its first window to reload'
在此处查看有关fswatch的更多信息:https ://stackoverflow.com/a/13807906/3510611
http://livereload.com/-OS X的本机应用程序,Windows的Alpha版本。开源于https://github.com/livereload/LiveReload2
使用Gulp观看文件,并使用Browsersync重新加载浏览器。
这些步骤是:
在命令行中执行
npm install --save-dev gulp浏览器同步
创建具有以下内容的gulpfile.js:
var gulp = require('gulp');
var browserSync = require('browser-sync').create();
var reload = browserSync.reload;
gulp.task('serve', function() {
browserSync.init({
server: {
baseDir: "./"
}
});
gulp.watch("*.html").on("change", reload);
});
跑
喝一口
编辑HTML,保存并查看浏览器重新加载。通过将特殊标签动态注入到HTML文件中来实现魔术。
该实况 Chrome扩展可以很容易地设置为监控本地文件的更改。
有一个适用于os x和Chrome的Java应用程序Refreschro。它将监视本地文件系统上的一组给定文件,并在检测到更改时重新加载Chrome:
如果您使用的是GNU / Linux,则可以使用名为Falkon的出色浏览器。它基于Qt WebEngine。就像Firefox或Chromium一样-区别在于,它在文件更新时自动刷新页面。无论您使用vim,nano还是atom,vscode,括号,geany,mousepad等,自动刷新都无关紧要。
在Arch Linux上,您可以轻松安装Falkon:
sudo pacman -S falkon
这是快照包。
这对我有用(在Ubuntu中):
#!/bin/bash
#
# Watches the folder or files passed as arguments to the script and when it
# detects a change it automatically refreshes the current selected Chrome tab or
# window.
#
# Usage:
# ./chrome-refresher.sh /folder/to/watch
TIME_FORMAT='%F %H:%M'
OUTPUT_FORMAT='%T Event(s): %e fired for file: %w. Refreshing.'
while inotifywait --exclude '.+\.swp$' -e modify -q \
-r --timefmt "${TIME_FORMAT}" --format "${OUTPUT_FORMAT}" "$@"; do
xdotool search --onlyvisible --class chromium windowactivate --sync key F5 \
search --onlyvisible --class gnome-terminal windowactivate
done
您可能需要安装inotify和xdotool软件包(sudo apt-get install inotify-tools xdotool
在Ubuntu中),并将args更改--class
为首选浏览器和终端的实际名称。
按照说明启动脚本,然后在浏览器中打开index.html。每次保存在vim中后,脚本将聚焦于浏览器的窗口,刷新它,然后返回到终端。
xdotool search --name 127.0.0.1 windowactivate key F5
在localhost(127.0 )上工作。当然只有0.1)。现在,我必须将其重新插入脚本。
我找到的最灵活的解决方案是chrome LiveReload扩展与防护服务器配对。
观看项目中的所有文件,或仅观看您指定的文件。这是一个示例Guardfile配置:
guard 'livereload' do
watch(%r{.*\.(css|js|html|markdown|md|yml)})
end
缺点是您必须针对每个项目进行设置,如果您熟悉ruby,这会有所帮助。
我还使用了Tincr chrome扩展名-但它似乎与框架和文件结构紧密相连。(我尝试为jekyll项目连接tincr,但是它只允许我查看单个文件的更改,而不考虑包括,部分或布局的更改)。但是,Tincr在具有一致且预定义文件结构的项目(如rails)中非常有效。
如果Tincr允许重新加载所有兼容的匹配模式,那将是一个很好的解决方案,但该项目的功能集仍然受到限制。
根据attekei对OSX的回答:
$ brew install fswatch
将所有内容都放入reload.scpt
:
function run(argv) {
if (argv.length < 1) {
console.log("Please supply a (partial) URL to reload");
return;
}
console.log("Trying to reload: " + argv[0]);
let a = Application("Google Chrome");
for (let i = 0; i < a.windows.length; i++) {
let win = a.windows[i];
for (let j = 0; j < win.tabs.length; j++) {
let tab = win.tabs[j];
if (tab.url().startsWith("file://") && tab.url().endsWith(argv[0])) {
console.log("Reloading URL: " + tab.url());
tab.reload();
return;
}
}
}
console.log("Tab not found.");
}
这将重新加载它找到的第一个选项卡,该选项卡file://
以第一个命令行参数开头和结尾。您可以根据需要进行调整。
最后,做这样的事情。
fswatch -o ~/path/to/watch | xargs -n1 osascript -l JavaScript reload.scpt myindex.html
fswatch -o
输出在每个更改事件中已更改的文件数,每行一个。通常它只会打印1
。xargs
读取这些1
s,并-n1
表示将每个s 作为参数传递给的新执行osascript
(在此将被忽略)。
tab.title.includes(argv[0])
作为条件,我可以匹配网页标题中使用本地服务器的时候,而不是文件,它可以比URL少挑剔,和作品://。
好的,这是我粗略的Auto Hotkey解决方案(在Linux上,请尝试Auto Key)。当保存键盘快捷键被按下时,启动浏览器,点击重新加载按钮,再切换回编辑器。我只是讨厌让其他解决方案运行。如果您的编辑器自动保存,将无法正常工作。
^s:: ; '^' means ctrl key. '!' is alt, '+' is shift. Can be combined.
MouseGetPos x,y
Send ^s
; if your IDE is not that fast with saving, increase.
Sleep 100
; Activate the browser. This may differ on your system. Can be found with AHK Window Spy.
WinActivate ahk_class Chrome_WidgetWin_1
WinWaitActive ahk_class Chrome_WidgetWin_1
Sleep 100 ; better safe than sorry.
;~ Send ^F5 ; I dont know why this doesnt work ...
Click 92,62 ; ... so lets click the reload button instead.
; Switch back to Editor. Can be found with AHK Window Spy.
WinActivate ahk_class zc-frame
WinWaitActive ahk_class zc-frame
Sleep 100 ; better safe than sorry.
MouseMove x,y
return
使用R的离线解决方案
该代码将:
每次将更改保存到.html文件时,使浏览器刷新。
install.packages("servr") servr::httw(dir = "c:/users/username/desktop/")
python等也存在类似的解决方案。