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

Applescript 调用子例程的应用程序范围问题,applescript,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),例如: 然而,在脚本

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

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应用程序“Excel”命令放在tell应用程序“Mail”代码块中

我怎样才能拥有一个通用对话框子例程,它总是在特定的应用程序中生成对话框?问题是我把我的应用程序分配到不同的空间,当它跳出脚本调试器时会很痛苦。有很多(OSX空间和/或脚本调试器)解决方法,但我想知道为什么这段代码会失败,以及如何正确执行它


编辑->即使我从子例程中删除“告诉应用程序…”和“结束告诉”行,我也会收到一个错误。

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

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


发生此错误是因为当前目标是应用程序邮件。这意味着一切都是针对邮件的。Mail不知道处理程序show_Dialog()并返回错误。要将目标设置回当前脚本,您可以在处理程序调用前面添加单词my,在处理程序调用末尾添加of me,或者在处理程序调用周围包装一个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