从10.10开始,Apple开始也支持JavaScript for Automation而不是AppleScript,但是我真的很难理解他们的JavaScript语法。如何使用JavaScript访问Apple Mail中选定邮件的主题?
例如让我们这个简单的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
它所做的就是显示与每一个选择的电子邮件的邮件应用程序对象的对话框。不能简单得多,可以吗?在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.
什么非常有帮助的错误消息,我们来到这里,不是!
所以基本上在JavaScript桥接性质实际上没有属性,但功能?苹果公司至少在查看脚本字典时指出了这一点,然后选择JavaScript作为一种语言,我会试试看,如果可行的话,接受你的答案。 – Mecki
@Mecki,您是否阅读过Apple的JXA发行说明(上面的链接)?他们确实声明你需要括号才能获得这些值。 – JMichaelTX
是的,现在我已经看到了。但是当你想知道什么样的自动化是可能的,你通常会打开'Script Editor'(应用程序),然后进入'File> Open Dictionary ...'并选择你想要编写脚本的应用程序。在这个窗口中,你可以在'AppleScript'和'JavaScript'之间切换;在那里用括号显示属性会很容易。不这样做是一个巨大的失败恕我直言。 – Mecki