2015-04-02 67 views
1

如何通过osascript在Javascript中启动应用程序?如何通过osascript在Javascript中启动应用程序?

我一直在与一些例子,它可以在互联网上找到,我可以让他们的工作打转转,但如果针对自动化应用程序尚未启动,我得到以下错误:

2015-04-02 10:43:34.749 js.sh[3434:57612] warning: failed to get scripting definition from /Applications/Safari.app; it may not be scriptable.

如果Safari已经打开,下面的例子就像一个魅力。

#!/usr/bin/osascript -l JavaScript 

var Safari = new Application("/Applications/Safari.app"); 

Safari.activate; 

window = Safari.windows[0]; 

tab = Safari.Tab({url:"http://www.dr.dk"}); 
window.tabs.push(tab); 
window.currentTab = tab; 

我认为activate方法之一,但似乎我忽略了一些东西。

+0

如果目标应用程序尚未运行,JXA应自动启动。 OTOH,JXA,就像它之前的Scripting Bridge一样,充满了设计缺陷和执行漏洞,因此,如果/当它搞砸时不要太惊讶。唯一支持的选项是AppleScript。 – foo 2015-04-02 13:14:22

+0

顺便说一句,'Safari.activate'应该读作'Safari.activate()',因为JavaScript的函数对象只有在你调用它们的时候才会执行任何操作。但是,所有这些都会将Safari带入前台。发送Apple事件不会启动应用程序:Apple事件管理器的工作是与_existing_进程交谈,而不是启动新进程(这是LaunchServices的责任)。如果应用程序尚未运行,则由客户端(例如AppleScript)通过“ - [NSWorkspace launchApplicationAtURL:options:configuration:error:]'_before_发送AE给它启动它。 AS做得对;如果JXA没有,那是因为它是垃圾。 – foo 2015-04-02 13:42:55

回答

2

你的脚本在我的机器上工作得很好,并且Safari启动了。为了使应用程序前,你需要改变这一行:

Safari.activate; 

这样:

Safari.activate(); 

您必须(使用括号)调用启动命令的功能。

相关问题