【问题标题】:How to access subjects of selected mails in Apple Mail using JavaScript?如何使用 JavaScript 访问 Apple Mail 中选定邮件的主题?
【发布时间】:2018-04-01 14:35:49
【问题描述】:

从 10.10 开始,Apple 也开始支持 JavaScript for Automation 而不是 AppleScript,但我真的很难理解他们的 JavaScript 语法。

例如让我们来看看这个简单的 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 macos automation applescript


    【解决方案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 在他们的所有文档中都使用了它。

    Introduction to JavaScript for Automation Release Notes

    【讨论】:

    • 所以基本上JavaScript桥接中的属性实际上不是属性而是函数? Apple 至少可以在查看脚本字典然后选择 JavaScript 作为语言时指出这一点? 如果可行,我会尝试并接受您的回答。
    • @Mecki,您是否阅读过 Apple 的 JXA 发行说明(上面的链接)?他们确实声明您需要括号来获取值。
    • 是的,现在我已经看到了。但是当你想知道什么样的自动化是可能的,你通常打开Script Editor(应用程序)然后你去File > Open Dictionary...并选择你想要编写脚本的应用程序。在这个窗口你可以在AppleScriptJavaScript之间切换;在那里只显示带括号的属性会很容易。恕我直言,不这样做是一个巨大的失败。
    猜你喜欢
    • 2017-11-19
    • 2017-10-10
    • 1970-01-01
    • 1970-01-01
    • 2011-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-28
    相关资源
    最近更新 更多