背景信息:我为tmux创建了一个小状态栏,显示iTunes中的一些信息(歌曲播放,艺术家,玩家位置等)。它是通过shell调用(在我的例子中是zsh)$(osascript -l JavaScript script_file)
来完成的。我遇到的问题是应用程序对象上方法调用的默认行为:如果应用程序关闭,任何调用都会打开应用程序。
这对我来说是一个问题因为,因为tmux状态栏每秒更新一次,如果应用程序在检查完运行后关闭,但是在调用之前,它会重新打开,这是一个巨大的痛苦,如果我想关闭该应用程序。
示例代码:
1 itunes = Application('iTunes')
2
3 if (itunes.running()) {
4 return itunesStatusLine()
5 } else {
6 return '---'
7 }
您可以看到if和return之间的竞争条件。
我考虑过的事情:
我认为理想的解决方案是使用方法调用,如果应用程序关闭而不是打开应用程序,则会引发异常。如果有任何办法与JXA做这样的事情,我不知所措。我已经对文档进行了筛选(脚本编辑器库中的内容以及我可以在网上找到的剪贴簿内容)并且显示为空。
答案 0 :(得分:0)
我不确定你到底在想什么,但我有:
/**
* Checks to see if an app is running.
*
* @param appName - Text containing the Application ID, Application Name or Process Name of the application.
* @return - True if the app is running, false if the app is not running.
*/
function isAppRunning(appName) {
try {
return Application(appName).running();
} catch (e) {
return false;
}
}
这对我有用,不会导致应用启动。如果不存在此类应用程序,则只返回false(未运行)。