2015-04-02 66 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(); 

您必須(使用括號)調用啓動命令的功能。

相關問題