从10.10开始,Apple开始也支持JavaScript for Automation而不是AppleScript,但我真的很难理解他们的JavaScript语法。
E.g。让我们来看看这个简单的AppleScript:
tell application "Mail"
set seletedMails to selection
repeat with aMail in seletedMails
set aSubject to subject of aMail
display dialog aSubject
end repeat
end tell
它只是在Mail应用程序中显示一个对话框,其中包含每个选定电子邮件的主题。不能比那简单得多,可以吗?在JavaScript中应该很容易做到这一点,对吧?所以这是我的代码
function main ( ) {
var Mail = Application('com.apple.mail')
Mail.includeStandardAdditions = true
var selectedMails = Mail.selection
for (var aMail of selectedMails) {
Mail.displayDialog(aMail.subject)
}
}
main()
结果:
Error -1700: Can't convert types.
好的......我做错了什么?我也无法调用selectedMails.length
,同样的错误。 selectedMails
似乎根本不是一个数组。哦,等等,当我这样做var selectedMails = Mail.selections
(注意复数形式!),然后我可以做selectedMails.length
,但它总是给我0,无论我选择了多少邮件。当我这样做时(注意,也使用复数形式):
function main ( ) {
var Mail = Application('com.apple.mail')
Mail.includeStandardAdditions = true
var selectedMails = Mail.selections
for (var aMail of selectedMails) {
Mail.displayDialog(aMail.subject)
}
}
main()
它只说:
Error -2700: Script error.
我们在这里获得了非常有用的错误消息,而不是!
答案 0 :(得分:1)
你非常接近。 通常,对于JXA,您需要在命令末尾使用括号来获取值。所以,你需要:
Mail.selection()
aMail.subject()
这是完整的脚本,包含我的更改:
'use strict';
var app = Application.currentApplication()
app.includeStandardAdditions = true
var Mail = Application('com.apple.mail')
var selectedMails = Mail.selection();
for (var aMail of selectedMails) {
app.displayDialog(aMail.subject());
}

我还添加了var app = Application.currentApplication()
,因为这被许多人认为是最佳做法,Apple在其所有文档中都使用了这种做法。