0

我的应用程序有一些基本的可写性。有一种方法(receivedInstantMessage)采用单个参数(消息)并将其传递给我的应用程序,然后由它处理它。

以下小程序:

tell application "MyApp"
    receivedInstantMessage "This is a message"
end tell

完美运行。我的应用程序显示一个包含消息的对话框(“这是一条消息”)。

我正在尝试对其进行设置,以便当我向 iChat 发送 IM 时,它会运行一个将消息内容发送到我的应用程序的 applescript。我已经告诉 iChat 在收到消息时运行脚本并且我知道该部分正在工作。我现在使用的脚本不起作用

using terms from application "iChat"
    on message received theMessage from theBuddy for theChat
        tell application "MyApp"
            receivedInstantMessage theMessage                
        end tell
    end message received
end using terms from

当我收到消息时没有任何反应。即使我从 iChat 替换消息变量 (theMessage) 并使用任意字符串,它仍然什么都不做。

我究竟做错了什么。我对 applescript 很陌生(通常是 REALbasic 编码器)。

[更新]:这似乎现在有效。简单重启 Mac 即可修复问题。很奇怪...

4

1 回答 1

1

只是一个语义细节:考虑脚本编写者正在向您的应用程序发送消息,而不是接收它们。是的,您的应用程序正在接收它们,但您选择的术语“receivedInstantMessage”是从您的应用程序的角度来看的,而不是脚本编写者。

此外,骆驼案例中的术语被认为是不合适的。AppleScript 术语可以(并且通常应该)包含空格。如果你真的想正确地做到这一点,你应该将术语分为名词和动词。(名词是正确建模的对象,具有属性,动词是用于操作它们的命令。在这种情况下,您可能需要发送消息“bla”之类的东西,其中消息是具有发送者、接收者、通道等属性的对象。并且 send 是一个以消息对象作为参数的命令 - 检查 Snak 的字典以获得非常好的 - 但不是完美的 - 实现)。

对不起,如果这听起来很肛门。我已经使用 AppleScript 多年了,虽然我非常感谢开发人员添加 AppleScript 支持,但我知道我代表所有 AppleScript 使用者,当我说结构不佳的字典和糟糕的术语选择令人沮丧和恼火时,尤其是当应用程序变得越来越多时成熟,开发人员开始说“我知道 applescript 界面需要彻底检修,但我不想破坏现有脚本!”之类的话。如果脚本界面变得更好,即使它破坏了现有的脚本,所有的 applescripters 都喜欢它。所以:现在做错了,但准备好以后从根本上改进它。:)

甚至 Apple 也有一些糟糕的术语,例如在 iTunes 中有一个 updatePodcast 和 updateAllPodcasts 命令。这是错误的,根据他们自己的技术说明2106 - 特别注意关于命名规则的部分。他们应该有一个播客对象和一个更新命令,这样你也可以执行诸如“删除名称包含的每个播客”之类的操作Ann Coulter”。(“谁”子句是 appleScript 最酷的功能之一!)

于 2011-05-25T19:49:39.393 回答