调用子程序的应用程序范围问题

时间:2014-03-13 09:20:48

标签: applescript

我有一个简短的子程序如下:

on show_Dialog(msg)
  tell application "Script Debugger Demo"
    display dialog msg
  end tell
end show_Dialog

如果我从脚本中调用它而没有拥有它的tell语句,例如:

show_Dialog("well this works")

没有问题。如果我从一个调用另一个应用程序的代码块中调用它,我得到一个(未指定的)错误(-1708),例如:

tell application Mail
  show_Dialog("this will not work for sure")
end tell

然而,在脚本块中,我可以在tell应用程序“Mail”代码块中放置一个tell application“Excel”命令。

如何拥有一个通用对话框子程序,它始终会在特定应用程序中生成对话框?问题是我将我的应用程序分配到不同的空间,当它从脚本调试器跳转时很痛苦。有许多(OS X Spaces和/或Script Debugger)解决方法,但我想知道为什么这个代码失败以及如何正确执行它。

编辑 - >即使我从子程序中删除'tell application ...'和'end tell'行,我也会收到错误。

1 个答案:

答案 0 :(得分:4)

发生错误是因为您当前的目标是应用程序邮件。这意味着一切都针对邮件。 Mail不知道处理程序show_Dialog()并返回错误。要将目标设置回当前脚本,您可以在处理程序调用前添加单词 my ,将 of my 添加到处理程序调用的末尾或者包装一个tell阻止处理程序调用。

tell application "Mail"
  my show_Dialog("this will work for sure")
end tell

tell application "Mail"
  show_Dialog("this will work for sure") of me
end tell

tell application "Mail"
   tell me
      show_Dialog("this will work for sure")
   end tell
end tell