簡體   English   中英

在OS X JavaScript for Automation(JXA)中附加事件偵聽器

[英]Attach event listeners in OS X JavaScript for Automation (JXA)

如何在OS X JavaScript中監聽事件以實現自動化。

在Messages應用程序的腳本庫中,有一個事件處理程序列表,例如messageSentmessageReceived 但是,我無法弄清楚如何使用它們。 嘗試傳遞函數會產生錯誤,並嘗試將這些變量設置為新函數會導致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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM