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

如何指示Applescript打开带有链接的新Firefox窗口?,firefox,applescript,Firefox,Applescript,我的代码如下所示 tell application "Firefox" open location "http://rubyquicktips.tumblr.com/" end tell 但是如果我打开Firefox,链接将在一个新选项卡中打开。但是我想在新的Firefox窗口中打开链接。 我怎样才能做到这一点呢?试试这个 tell application "Firefox" OpenURL "http://rubyquicktips.tumblr.com/" end tell t

我的代码如下所示

tell application "Firefox"
 open location "http://rubyquicktips.tumblr.com/"
end tell
但是如果我打开Firefox,链接将在一个新选项卡中打开。但是我想在新的Firefox窗口中打开链接。 我怎样才能做到这一点呢?

试试这个

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
或者试试这个

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

这是可行的,但会在第一个选项卡中打开欢迎站点

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

我对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
这将打开一个默认的新窗口。可能有更好的方法。

注意:

至少从Firefox v50开始,您可以使Firefox默认在新窗口中打开URL,方法是取消选中Firefox首选项的
常规
选项卡上的
在新选项卡中打开新窗口

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

如果您不想依赖于该设置的状态,下面的解决方案可能仍然有用。
(不幸的是,由于Firefox对AppleScript的支持有限,因此无论设置的状态如何,都没有类似的健壮解决方案可以始终在选项卡中打开)


以下是一个更强健的解决方案:

  • 不依赖于固定的延迟和

  • 与语言无关(与击键发送方法一样);i、 例如,它还可以与菜单和命令的本地化名称一起使用(例如,“文件”的“Datei”和…)

但是,由于GUI脚本用于以编程方式单击菜单项,因此您确实需要(需要管理权限的一次性操作)-例如,如果您的脚本是从终端运行的,则必须授权
terminal.app
,但是,如果您想在开发脚本时运行脚本,即使是
Script Editor.app
,也必须获得授权

告诉应用程序“Firefox”
#将Firefox放在最前面。
激活
#等到它真正到达最前面。
不要在最前面重复
延迟0.1
结束重复
#使用GUI脚本打开新窗口(辅助访问需要授权),
告诉应用程序“系统事件”告诉应用程序进程“Firefox”
将windowCountBefore设置为(窗口计数)
#单击文件>新建打开一个新窗口,但找到它
#按键盘快捷键而不是按姓名,以便也能工作
#使用本地化菜单名。
告诉菜单栏1的菜单1菜单栏1的项目3
单击(第一个菜单项,其属性“AXMenuItemCmdChar”的值为“N”,属性“AXMenuItemCmdModifiers”的值为0)
结束语
#等待新窗口出现。
重复while(窗口计数)=windowCountBefore
延迟0.2
结束重复
结束语
#最后,打开URL。
开放位置“http://example.org/"
结束语
注:

  • 在正常情况下,如果Firefox响应良好,那么它应该能够可靠地工作。但是,可以通过实现等待循环的超时来改进代码

  • Firefox并不是打开新窗口最快的,因此Firefox将首先激活,新窗口只会在大约一秒钟后出现

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

一个旁注是关于异常外观的
告诉应用程序“系统事件”来告诉应用程序进程“Firefox”
构造:

  • 主块的目标是Firefox应用程序(
    告诉应用程序“Firefox”
  • 但是,GUI脚本必须在
    系统事件
    应用程序的上下文中完成(
    告诉应用程序“系统事件”
    ),在该上下文中,必须以Firefox进程为目标(
    告诉应用程序进程“Firefox”
    )。虽然您可以编写两个嵌套的
    tell
    块,但为了方便和简洁,这里将它们组合成一个块 “激活”的解决方案是错误的,因为它们切换到桌面

    do shell script "open -n -a Firefox"
    

    OpenURL不适用于Leopard…但您的第二个技巧非常棒!至于现在,我们实际上使用的是Mac OS 10.12.5。这个解决方案不再有效了。如果有人仍然想这样做,你应该用openlocation替换OpenURL,就像blubb在is answer中提到的那样。@EdRandall:是的,任何执行GUI脚本代码的应用程序都必须经过授权;我添加了一个显式的note re脚本编辑器。重新超时:好主意,但答案已经指出“可以通过为等待循环实现超时来改进代码”;旁白:并不是缺乏授权会导致这些特定循环卡住(第一个循环不需要授权,第二个循环如果没有授权就无法到达)。RE:“激活”的解决方案是错误的,因为它们会切换桌面”-如果只使用一个,这是不正确的,仅当使用多个应用程序且目标应用程序未在当前应用程序上打开时才为真。此外,OP希望在新窗口中打开一个URL,因此您的答案不完整。没有找到更好的替代方案,对于Safari,我使用了“生成新文档”,但随着Big-Sur更新,他们在Safari中创建了一个新窗口,打开时间为5秒(idk,如果他们这样做是为了让M1 Mac感觉更快),OP谈论的是Firefox,所以Safari与此无关!你的书面回答事实上是不准确的,不完全符合OP的要求!