如何使用Applescript打开一个新的Firefox窗口并访问链接?

14

我的代码看起来像这样

tell application "Firefox"
 open location "http://rubyquicktips.tumblr.com/"
end tell

如果我打开了Firefox,链接将在一个新的选项卡中打开。但我想让链接在一个新的Firefox窗口中打开。如何实现?

6个回答

12

这个可以实现,但会在第一个标签页打开你的欢迎页面...

tell application "Firefox" to activate
tell application "System Events" to keystroke "n" using command down
delay 3
tell application "Firefox"
    open location "http://rubyquicktips.tumblr.com/"
end tell

6

试试这个...

tell application "Firefox"
    OpenURL "http://rubyquicktips.tumblr.com/"
end tell

或者尝试这个...
tell application "Firefox" to activate
tell application "System Events" to keystroke "n" using command down
tell application "Firefox"
    OpenURL "http://rubyquicktips.tumblr.com/"
end tell

OpenURL在Leopard上无法工作...但是你的第二个提示非常棒! - tabaluga
1
目前我们正在使用Mac OS 10.12.5。这种方法已经不再可行。如果有人仍想这么做,那么你需要用“打开位置”替换OpenURL,就像blubb在他的回答中提到的那样。 - JoeMecPak

5

我不是非常熟悉AppleScript,但是我想打开一个全新的默认窗口。这里有一个可行的方法:

tell application "System Events"
    tell process "Firefox"
        click menu item "New Window" of menu "File" of menu bar 1
    end tell
end tell

可选地,要专注于新窗口,请在此后添加以下行:

tell application "Firefox"
    activate
end tell

这将打开一个默认的新窗口。可能有更好的方法。


4
注意:
至少从 Firefox v50 开始,您可以通过在 Firefox 首选项的“常规”选项卡上取消选中“在新标签页中打开新窗口”,使 Firefox 默认在新窗口中打开 URL。
但是,请注意,这是一个持久设置,影响从 Firefox 外部打开的所有 URL。
如果您不想依赖该设置的状态,则下面的解决方案仍然可能会引起兴趣。 (不幸的是,由于 Firefox 的有限 AppleScript 支持,没有类似健壮的解决方案可以始终在标签页中打开,而不管设置的状态如何)。
这是一个更加健壮的解决方案,它具有以下特点:
  • 不依赖于固定的延迟时间

  • 与语言无关(如按键发送方法);也就是说,它还可以使用本地化菜单和命令名称(例如,“Datei”代表“文件”等)

然而,由于GUI脚本用于通过编程方式单击菜单项,您需要首先授权调用应用程序进行辅助访问(这是一次需要管理权限的操作) - 例如,如果您的脚本从终端运行,则必须授权Terminal.app,但即使在开发脚本时运行脚本,也必须授权Script Editor.app
tell application "Firefox"

    # Make Firefox frontmost.
    activate

    # Wait until it is truly frontmost.
    repeat while not frontmost
        delay 0.1
    end repeat

    # Open a new window using GUI scripting (requires authorization for assistive access),
    tell application "System Events" to tell application process "Firefox"
        set windowCountBefore to (count of windows)
        # Click on File > New to open a new window, but locate it
        # by keyboard shortcut rather than by name, so as to also work
        # with localized menu names.
        tell menu 1 of menu bar item 3 of menu bar 1
            click (first menu item whose value of attribute "AXMenuItemCmdChar" is "N" and value of attribute "AXMenuItemCmdModifiers" is 0)
        end tell
        # Wait for the new window to appear.
        repeat while (count of windows) = windowCountBefore
            delay 0.2
        end repeat
    end tell

    # Finally, open the URL.    
    open location "http://example.org/"

end tell

注意:

  • 通常情况下,如果 Firefox 反应良好,则这应该可靠地工作。但是,通过实现等待循环的超时,可以改进代码。

  • Firefox 不是最快打开新窗口的浏览器,因此 Firefox 将首先激活,新窗口仅在大约一秒钟后出现。

  • 新窗口将总是有一个空的第一个选项卡,并且 URL 将在第二个选项卡中打开。

关于看起来不同寻常的tell application "System Events" to tell application process "Firefox" 结构的附注:

  • 主要块针对 Firefox 应用程序(tell application"Firefox")。
  • 但是,GUI 脚本必须在 System Events 应用程序的上下文中完成(tell application "System Events"),并且在该上下文中,必须针对 Firefox 进程(tell application process "FireFox")。虽然您可以编写两个嵌套的 tell 块,但为方便和简洁起见,在此处将它们合并为一个块。

@EdRandall:是的,执行GUI脚本代码的任何应用程序都必须经过授权;我已经添加了一个明确的注释关于脚本编辑器。关于超时:好主意,但答案已经说明“通过为等待循环实现超时可以改进代码”;另外:不是缺乏授权会导致这些特定的循环被卡住(第一个循环不需要授权,如果缺少授权,则不会到达第二个循环)。 - mklement0

1
“激活”桌面的解决方案是错误的,因为它们会切换桌面。
do shell script "open -n -a Firefox"

回复:“激活”解决方案是错误的,因为它们会切换桌面——如果只使用一个桌面,则不是这样,只有在使用多个桌面且目标应用程序未在当前桌面上打开时才是如此。此外,原帖作者想要在新窗口中打开URL,因此您的答案是不完整的。 - user3439894
我还没有找到更好的替代方法,对于Safari,我使用“新建文档”,但是随着Big Sur更新,他们在Safari中打开新窗口需要5秒钟(我不知道他们是否故意这样做来让M1 Mac感觉更快)。 - Isaak Osipovich Dunayevsky
OP在谈论Firefox,所以Safari与此无关!你的回答是事实上不准确的,并且不完整符合OP的要求! - user3439894

0

我使用以下简单的shell脚本打开不同标签页中的多个火狐浏览器页面,并且它对我有效。也许你需要稍微调整一下睡眠时间。

步骤:

  1. 打开 Automator

  2. 选择:应用程序

  3. 点击 选择

  4. 搜索 运行 Shell 脚本

  5. 点击并将其拖到 右侧窗口

  6. Shell 中选择 /bin/bash

  7. 在“传递输入”中选择 作为参数选择

  8. 粘贴以下代码

    #!/bin/bash
    
    open -a Firefox https://stackoverflow.com
    sleep 0.5
    open -a Firefox https://apple.com
    sleep 0.5
    open -a Firefox https://google.com
    
  9. Command + S保存

  10. 给它一个名称和位置来保存。

  11. 选择文件格式:应用程序

  12. 保存

  13. 添加到您的 dock(适用于 MAC os),并 享受(适用于每个操作系统 :)!!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接