通过终端命令使用浏览器自动重新加载html文件

通过终端命令使用浏览器自动重新加载html文件,html,macos,bash,unix,terminal,Html,Macos,Bash,Unix,Terminal,我正在尝试做一些小的html网页的东西,并会发现它非常有用,能够看到通过浏览器查看html文件的实时更新,每当我保存我的文件。我知道可能有一些IDE可以为您这样做,如果您推荐任何IDE,请这样做,但我希望制作一个脚本,在浏览器中打开文件,同时关闭已经打开的文件版本,以便我可以继续在vim中进行所有编程 我知道我可以在Mac OSX中使用以下命令将文件打开到当前浏览器的新选项卡中: open foo.html 但是,如果在定时循环中发生这种情况,或者每次在vim中写入(:w),我的浏览器都会充满

我正在尝试做一些小的html网页的东西,并会发现它非常有用,能够看到通过浏览器查看html文件的实时更新,每当我保存我的文件。我知道可能有一些IDE可以为您这样做,如果您推荐任何IDE,请这样做,但我希望制作一个脚本,在浏览器中打开文件,同时关闭已经打开的文件版本,以便我可以继续在vim中进行所有编程

我知道我可以在Mac OSX中使用以下命令将文件打开到当前浏览器的新选项卡中:

open foo.html
但是,如果在定时循环中发生这种情况,或者每次在vim中写入(:w),我的浏览器都会充满新的选项卡。打开新选项卡时是否有关闭旧选项卡的方法?还是有更好的方法我没有考虑过?如果我能继续在终端中使用vim,这将是我的首选


提前感谢。

您可以使用AppleScript重新加载选项卡。参见本杰的答案,了解
使用
osascript
从shell脚本调用AppleScript。你会得到这样的结果:

osascript -e 'tell application "Google Chrome" to tell the active tab of its first window to reload'
set u to "http://t.co/"
tell application "Google Chrome"
    repeat with w in windows
        set i to 0
        repeat with t in tabs of w
            set i to i + 1
            if URL of t is u then
                set active tab index of w to i
                set index of w to 1
                tell t to reload
                activate
                return
            end if
        end repeat
    end repeat
    open location u
    activate
end tell
或者,您可以使用类似“下一步”的功能关闭所有以前的选项卡:

tell application "Google Chrome"
    set windowList to every tab of every window whose URL starts with "http://stackoverflow.com"
    repeat with tabList in windowList
        repeat with thisTab in tabList
            close thisTab
        end repeat
    end repeat
end tell

对于您的应用程序来说,这可能有些过分,但我在所有HTML项目中都使用make文件。我只为自己创建静态站点,但我使用较少的Java和Jade(有时php在本地编译为静态页面,不能用Jade动态包含是愚蠢的),make与vim集成得非常好。您可以制定编译、重新加载、推送到服务器等规则。我获取浏览器实时更新的方法是启动一个节点或python服务器,使用额外的javascript“watcher”为html提供服务。根据您使用的其他技术,有很多种类。

您可以获得一个可以从套接字接收命令的浏览器,如uzbl、luakit或dwb

您可以使用扩展名(插件、插件,无论您最喜欢的浏览器如何称呼它)添加此功能(侦听套接字,甚至文件)

您可以在正在编辑的页面中插入一些javascript,这将使其在可以从CLI控制的某个信号上重新加载

您可以编写一个脚本,终止浏览器并重新打开它。某些浏览器会尝试加载页面的缓存版本。为此,您最好使用查询字符串并每次创建一个唯一的URI(例如,
打开“foo.html?$(日期+%s)”


可能性是无穷的

如果已经有了
foo.html
的选项卡,
open foo.html
应该在Safari中聚焦该选项卡。对于Chrome,您可以使用如下内容:

osascript -e 'tell application "Google Chrome" to tell the active tab of its first window to reload'
set u to "http://t.co/"
tell application "Google Chrome"
    repeat with w in windows
        set i to 0
        repeat with t in tabs of w
            set i to i + 1
            if URL of t is u then
                set active tab index of w to i
                set index of w to 1
                tell t to reload
                activate
                return
            end if
        end repeat
    end repeat
    open location u
    activate
end tell
我刚刚分配了⌘R在TextMate的
text.html
范围中打开“$TM_FILEPATH”-一个Safari。我还启用了在切换到另一个应用程序时保存文档,因此它基本上完成了编辑保存切换应用程序刷新周期的最后三个步骤

其他选择:


我在这里找到了一些替代解决方案/kluges:此解决方案不使用命令行,但您可以添加一点JavaScript,使用
location.reload()重新加载页面每隔一段时间,并且只在开发过程中打开它。AppleScript支持是一个移动的目标,但是这个脚本在macOS 10.12.6和Chrome 62中开箱即用。第一次运行加载,第二次刷新——即使我在另一个选项卡上。伟大的但是,如果我必须切换到另一个窗口,它将无法工作——它会找到正确的选项卡编号,然后将其重新加载到当前窗口中。只刷新Chrome的第一个选项卡:
osascript-e'告诉应用程序“Google Chrome”告诉其第一个窗口的第一个选项卡重新加载'