2017-10-20 64 views
1

从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. 

什么非常有帮助的错误消息,我们来到这里,不是!

回答

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(); 
 
\t \t \t \t 
 
    for (var aMail of selectedMails) { 
 
     app.displayDialog(aMail.subject()); 
 
    } 
 
\t \t

我还添加了var app = Application.currentApplication(),因为这被认为是许多人都是最佳实践,苹果公司在他们的所有文件中都使用了这种做法

Introduction to JavaScript for Automation Release Notes

+0

所以基本上在JavaScript桥接性质实际上没有属性,但功能?苹果公司至少在查看脚本字典时指出了这一点,然后选择JavaScript作为一种语言,我会试试看,如果可行的话,接受你的答案。 – Mecki

+0

@Mecki,您是否阅读过Apple的JXA发行说明(上面的链接)?他们确实声明你需要括号才能获得这些值。 – JMichaelTX

+0

是的,现在我已经看到了。但是当你想知道什么样的自动化是可能的,你通常会打开'Script Editor'(应用程序),然后进入'File> Open Dictionary ...'并选择你想要编写脚本的应用程序。在这个窗口中,你可以在'AppleScript'和'JavaScript'之间切换;在那里用括号显示属性会很容易。不这样做是一个巨大的失败恕我直言。 – Mecki

相关问题