AppleScript:“预期行末等,但找到了标识符”中出现“使用框架”错误。

时间:2018-10-14 19:51:44

标签: applescript

我有以下AppleScript。

use framework "Foundation"
display dialog "foo"

注意:在此示例中并未实际使用Foundation框架,因为该部分代码与该示例无关。仅此代码已产生错误。在现实生活中,我们显然仅导入一个框架以使用它,duh:-)

运行此命令时,出现无用的错误:

Expected end of line, etc. but found identifier. 

macOS脚本编辑器停止的标识符为“对话框”。

当我将代码更改为:

display dialog "foo"

脚本按预期运行。

我有两个问题:

  1. 为什么上面的示例会产生错误?
  2. 为什么会产生此确切错误?或者换句话说:为什么这个错误没有帮助?通常,AppleScript就是这种情况吗?

2 个答案:

答案 0 :(得分:1)

答案中的谓词已过时。您现在可以使用标准脚本导入框架(自优胜美地以来为AFAIR)。

如果您应用use framework语句,则必须添加

use scripting additions

能够访问display dialog

答案 1 :(得分:0)

!我基于我的答案的信息已经过时,请参阅我的答案下方的更新。


脚本错误的原因是:

"The importation of frameworks via the use statement is only supported in script libraries, not in other scripts or applets."

因此,基本上:您不允许我们在常规的AppleScript脚本中使用use语句。您只能在脚本库中使用

为解决此问题,我们创建了一个“脚本库”,它只是另一个AppleScript文件。假设我们将此脚本库称为chewbacca.scpt。您需要将脚本放置在Mac上的特定位置。 (此位置有一个few options)。在尝试导入脚本库时,AppleScript仅在这些位置中查找。

然后,要使用脚本库,请执行以下操作:

tell script "chewbacca"
  display dialog "foo"
end tell

应该可以得到预期的结果。


更新

在阅读了一些答案并阅读了更多文档之后:

扩展AppleScript的方法是导入一个库,这些库称为osax(或“脚本添加”),因为它们的文件名以.osax结尾。 OSAX代表“开放脚本架构扩展”。要导入osax,我们在脚本中编写use library(对此我不是100%肯定)。通过导入osax,我们可以使用该osax中的命令。

AppleScript(该语言)没有用于执行以下操作的命令:用户交互对话框(display dialog),读写文件,文件系统命令,日期函数以及文本和数学运算。

但是:Apple确实提供了可以提供以下命令的osax:StandardAdditions.osax,不难看出为什么这是最常用的osax之一。

要导入此osax:

use scripting additions

现在回到我的问题:

我看到AppleScript在某些情况下的行为有所不同:

  1. 脚本不会导入osax
  2. 脚本导入osax(但不导入StandardAdditions.osax

在情况1中,似乎AppleScript(运行时?)以静默方式自动导入StandardAdditions.osax。我认为是这种情况,因为我可以使用display dialog

在情况2中,AppleScript(运行时)不会自动导入StandardAdditions.osax

我可以从理论上解释这种不同的行为:

在情况1中,我怀疑他们想使人们更轻松地开始使用AppleScript,以便他们自动导入大多数人/初学者可能想使用的基本命令。

情况2背后的想法可能是这样的:  “开发人员正在明确导入osax,因此他们可能没有  需要StandardAdditions.osax,所以我们不要自动导入它。”

我发现在某个地方,总是通过向脚本中添加StandardAdditions.osax来显式导入use scripting additions是个好主意。 以后我会遵循这个建议。