我的代码看起来像这样
tell application "Firefox"
open location "http://rubyquicktips.tumblr.com/"
end tell
但是如果我打开Firefox,该链接将在新标签页中打开。但我希望链接在新的Firefox窗口中打开。 我怎么能做到这一点?
答案 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"
结构:
tell application "Firefox"
)。System Events
应用程序(tell application "System Events"
)的上下文中完成,并且在该上下文中,必须是Firefox 进程目标(tell application process "FireFox"
)。虽然您可以编写两个嵌套的 tell
块,但为了方便和简洁,它们在这里组合成一个块。 答案 4 :(得分:-1)
“激活”的解决方案是错误的,因为它们切换了桌面
do shell script "open -n -a Firefox"