我的应用程序具有一些基本的可用性。有一个方法(receivedInstantMessage)接受一个参数(消息)并将其传递给我的应用程序然后处理它。
以下AppleScript:
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)并使用任意字符串,它仍然无效。
我做错了什么。我对applecript很新(通常是一个REALbasic编码器)。
[更新]:这似乎现在有效。一个简单的重启Mac固定的东西。很奇怪......
答案 0 :(得分:1)
只是一个语义细节:考虑脚本编写者正在向您的应用发送消息,而不是接收消息。是的,您的应用程序正在接收它们,但您选择的“receivedInstantMessage”术语是从您的应用程序而不是脚本编写者的角度出发的。
此外,在驼峰案例中有一个术语被认为是naff。 AppleScript术语可以(通常应该)包含空格。如果你真的想要做得恰到好处,你应该将术语分为名词和动词。 (其中名词是正确建模的对象,具有属性,动词是用于操纵它们的命令。在这种情况下,您可能需要发送消息“bla”,其中消息是具有发送者,接收者,频道等属性的对象。 send是一个将消息对象作为参数的命令 - 检查Snak的字典是否相当不错 - 但并不完美 - 实现。
对不起,如果这听起来很肛门。我已经使用了很多年了,虽然当开发人员添加Applecript支持时,我非常感激>赞赏它,但是当我说构造不好的词典时,我知道我代表所有的苹果脚本,而且糟糕的术语选择令人沮丧和烦恼特别是随着应用程序变得更加成熟,开发人员开始说“我知道AppleScript界面需要彻底检修,但我不想打破现有的脚本!”。如果脚本界面变得更好,所有applescripters都更喜欢它,即使它破坏了现有的脚本。所以:现在做错了,但要准备好以后从根本上改进它。 :)
即使Apple有一些糟糕的术语,例如在iTunes中有一个updatePodcast和updateAllPodcasts命令。这是错误的,根据他们自己的technote 2106 - 特别注意关于命名规则的部分..他们应该有播客对象和更新命令,这样你也可以做一些事情,比如“删除每个播客, name包含“Ann Coulter”。(“谁的”子句是appleScript最酷的功能之一!)