在MacOS上通过终端打开.html文件时设置目标

时间:2018-01-16 15:04:00

标签: macos shell google-chrome browser-tab

关于通过命令行打开.html文件有this solved topic

我使用该解决方案,它适用于

open ./myfile.html

但是,它始终在新选项卡中打开文件。我想在同一个标​​签中打开它(使用浏览器目标)。这在JavaScript中很容易做到,但我无法找到与上述代码结合使用的方法。

我现在的假设是,必须有一种方法将目标作为参数传递给open命令。 man open显示参数--args的以下内容:

  

所有剩余的参数都传递给打开的应用程序   argv参数为main()。这些参数未打开或   由开放工具解释。

所以我尝试了以下内容:

open ./myfile.html --args target=myfile_target   # still opens in new tab
open ./myfile.html --args target="myfile_target" # still opens in new tab
open ./myfile.html --args target:myfile_target   # still opens in new tab

我不确定这是否有效,但我认为必须有办法做到这一点。

编辑:现在只需使用chrome就可以了。

1 个答案:

答案 0 :(得分:2)

此Bash脚本包含一些AppleScript,以便打开一个浏览器窗口,其中包含脚本可以跟踪的引用,并继续使用正在进行的URL请求进行定位。

您应该能够将其复制粘贴到文本编辑器中,并将其保存为您希望调用此替换open函数的任何内容。我将其保存为url,位于$PATH变量中列出的其中一个目录中。这样,我只需从命令行输入url dropbox.com即可运行。

在完成此操作之前,您必须使其可执行。因此,在保存之后,运行以下命令:

chmod +x /path/to/file

然后你应该好好去。如果您遇到任何错误,请告诉我,我会修复它们。

    #!/bin/bash
    #
    # Usage: url %file% | %url%
    #
    # %file%: relative or absolute POSIX path to a local .html file
    # %url%: [http[s]://]domain[/path/etc...]

    IFS=''

    # Determine whether argument is file or web address
    [[ -f "$1" ]] && \
        _URL=file://$( cd "$( dirname "$1" )"; pwd )/$( basename "$1" ) || \
            { [[ $1 == http* ]] && _URL=$1 || _URL=http://$1; };

    # Read the value on the last line of this script
    _W=$( tail -n 1 "$0" )

    # Open a Safari window and store its AppleScript object id reference
    _W=$( osascript \
        -e "use S : app \"safari\"" \
        -e "try" \
        -e "    set S's window id $_W's document's url to \"$_URL\"" \
        -e "    return $_W" \
        -e "on error" \
        -e "    S's (make new document with properties {url:\"$_URL\"})" \
        -e "    return id of S's front window" \
        -e "end try" )

    _THIS=$( sed \$d "$0" ) # All but the last line of this script
    echo "$_THIS" > "$0"    # Overwrite this file
    echo -n "$_W" >> "$0"   # Appened the object id value as final line

    exit
    2934