2017-10-20 70 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

相關問題