[英]Attach event listeners in OS X JavaScript for Automation (JXA)
如何在OS X JavaScript中監聽事件以實現自動化。
在Messages應用程序的腳本庫中,有一個事件處理程序列表,例如messageSent
和messageReceived
。 但是,我無法弄清楚如何使用它們。 嘗試傳遞函數會產生錯誤,並嘗試將這些變量設置為新函數會導致REPL掛起。
設置這些事件處理程序的正確方法是什么?
您將創建一個腳本,然后從“ Preferences > General
的AppleScript處理程序菜單中進行Preferences > General
。 使用內置的Speak Events.applescript
文件作為指南,並注意必須覆蓋每個處理程序才能正確執行。
注意:即使包含標准添加,您仍然無法調用腳本添加命令,如say()
可能是因為他們如何在腳本引擎上實現此層,甚至使用currentApplication()
進行適當的調用看起來好像是被發送交叉申請。
這是一個模板:
Messages = Application.currentApplication()
Messages.includeStandardAdditions = true
function messageSent(m, e) {
}
function messageReceived(m, e) {
}
function chatRoomMessageReceived(e) {
}
function activeChatMessageReceived(m, e) {
}
function addressedMessageReceived(m, b, c, e) {
}
function receivedTextInvitation(e) {
}
function receivedAudioInvitation(m, b, c, e) {
}
function receivedVideoInvitation(m, b, c, e) {
}
function receivedLocalScreenSharingInvitation(b, c, e) {
}
function buddyAuthorizationRequested(e) {
}
function addressedChatRoomMessageReceived(e) {
}
function receivedRemoteScreenSharingInvitation(e) {
}
function loginFinished(e) {
}
function logoutFinished(e) {
}
function buddyBecameAvailable(e) {
}
function buddyBecameUnavailable(e) {
}
function receivedFileTransferInvitation(e) {
}
function avChatStarted(e) {
}
function avChatEnded(e) {
}
function completedFileTransfer(e) {
}
我已經說過要在OS X 10.11.3 Beta(15D9c)中工作了。
ObjC.import('stdlib')
var yell = "say"
function run() {
// messageReceived("test",{from:Application("Messages").services.byName("SMS").buddies[0]})
}
function execute(program, args) {
var command = program + " " + args.map(q).join("")
console.log(command)
$.system(command)
function q(s) {
return " '" + s.replace("'", "'\\''") + "' "
}
}
function messageReceived(text, who) {
execute(yell, [who.from.name(), text])
}
function loginFinished(service) {
execute(yell, ["login", service.for.name()])
}
function logoutFinished(service) { // doesn't work!
execute(yell, ["Logout", service.for.name()])
}
function keys(o) { // debugging tool
return Object.keys(o).join(",")
}
receivedTextInvitation = addressedMessageReceived = chatRoomMessageReceived = activeChatMessageReceived = messageReceived
function messageSent() {}
function receivedAudioInvitation() {}
function receivedVideoInvitation() {}
function receivedLocalScreenSharingInvitation() {}
function buddyAuthorizationRequested() {}
function addressedChatRoomMessageReceived() {}
function receivedRemoteScreenSharingInvitation() {}
function logoutFinished() {}
function buddyBecameAvailable() {}
function buddyBecameUnavailable() {}
function receivedFileTransferInvitation() {}
function avChatStarted() {}
function avChatEnded() {}
function completedFileTransfer() {}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.