如何指示Applescript打开带有链接的新Firefox窗口?

时间:2010-09-05 10:36:47

标签: firefox applescript

我的代码看起来像这样

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

但是如果我打开Firefox,该链接将在新标签页中打开。但我希望链接在新的Firefox窗口中打开。 我怎么能做到这一点?

5 个答案:

答案 0 :(得分:7)

这样可行,但会在第一个标签页中打开您的欢迎网站...

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

答案 1 :(得分:4)

试试这个......

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

答案 2 :(得分:2)

我并不完全熟悉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

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

答案 3 :(得分:1)

注意:

至少从Firefox v50开始,您可以通过在Firefox首选项的Open new windows in a new tab instead标签上取消选中General,在新窗口中打开Firefox 默认来打开网址。< / p>

但请注意,这是一个持久性设置,会影响从Firefox外部打开的所有网址。

如果您不想依赖该设置的状态,下面的解决方案可能仍然有用 (遗憾的是,由于Firefox的AppleScript支持有限,因此无论设置状态如何,都无法始终在选项卡中打开

这是一个更强大的解决方案:

  • 不依赖于固定延迟和

  • 与语言无关(按键发送方式也是如此);即,它也适用于菜单和命令的本地化名称(例如,“文件”的“Datei”,......)

但是,由于GUI脚本用于以编程方式单击菜单项,因此您需要authorize the calling applicationfor assistive access first(需要管理权限的一次性操作) - 例如,如果您的脚本是从终端运行的,您必须授权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将首先激活,新窗口只会在大约一秒钟左右出现。

  • 新窗口将始终显示空的第一个标签,并且该网址将在 2nd 标签中打开。

旁注是看起来不寻常的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块,但为了方便和简洁,它们在这里组合成一个块。

答案 4 :(得分:-1)

“激活”的解决方案是错误的,因为它们切换了桌面

do shell script "open -n -a Firefox"