16

我有一本关于 AppleScript 的书,我想知道是否应该保留。我已经知道 JavaScript。

我了解 Apple 最近在 OS X 中添加了 JavaScript 脚本支持。

这是否意味着我不必再学习 AppleScript 来为 OS X 应用程序编写脚本了,还是说它比这更重要?您的想法将不胜感激。

上面的问题是从想要让应用自动做事的应用用户的角度出发的。

应用程序开发人员(Cocoa)的情况如何?如果他们想让他们的应用程序可编写脚本,他们可以不学习 AppleScript 吗?

更新:增加了赏金。问题改写(没有不尊重 AppleScript 及其用户的意思):鉴于我已经了解 JavaScript,我还有什么理由应该再学习 AppleScript 吗?您对此事的详细想法将不胜感激。

4

2 回答 2

11

AppleScript 现在可以用 JavaScript 代替吗?

对于琐碎的东西,可能。除此之外,可能不会。

  1. 太多的 Apple 事件/OSA 功能在 JXA 中被削弱、损坏或完全丢失。它在一定程度上起作用,但除此之外,你已经被塞满了。对于严肃的工作或生产工作,当需要 JXA 搞砸的功能时,或者在处理使 JXA 失控和哭泣的应用程序时,您将不得不坚持使用 AppleScript:它是目前唯一真正能正确完成这些工作的解决方案。

  2. 您仍然需要了解应用程序脚本的工作原理,为此您必须阅读 AppleScript 文献。JXA 自己的文档是可悲且具有误导性的错误,因此阅读该文档不会更明智。没有解释这些概念的第 3 方 JXA 文献,而且将来出现的任何内容都可能是误导性的错误。(哎呀,即使是当前的 AppleScript 书籍也倾向于捏造/撒谎/弄错。)

  3. 您还需要了解如何编写特定应用程序的脚本,而众所周知,应用程序字典本身并不完整且不足。这意味着您依赖于补充文档(如果存在)、示例脚本以及这些应用程序的更有经验的用户。所有这些都是基于 AppleScript 的,因此您需要了解一些 AppleScript 才能理解它们并与之交流。

  4. 应用程序开发人员应该继续针对 AppleScript 开发和测试他们的应用程序 - 这是事实上的规范,在过去的 20 年中,所有可编写脚本的应用程序都根据它进行了开发和测试,而且情况将继续如此。即使 JXA 不是这样的小怪,开发人员仍然需要针对 AS 进行测试,以确保他们没有忽略那里的任何怪癖。

于 2014-11-13T21:19:34.310 回答
5

如果您愿意灵活地采用哪种实现方法,那么 JavaScript for Automation (JXA) 1.0 就足够了。使用 JXA 1.0,您可能需要执行以下操作:

  1. 当 JXA-to-traditional-AppleEvents* 桥不起作用时,使用 JXA-to-ObjC 桥,
  2. whose当 JXA 1.0网桥查询不起作用时,创建一个 JavaScript 过滤器,
  3. 清楚地考虑何时使用 Objective-C 端、JXA-new-stuff-bridge、传统的 AppleEvents-bridge 或 JavaScript 端

* Apple 事件脚本自 1990 年代初从 Classic MacOS 7 开始就已存在。自 2006 年左右以来,Apple 建议考虑非 Apple 事件机制。

注意: Apple 事件并不总是最有效或最合适的进程间通信机制。OS X 提供了其他机制... [Apple, "Open Scripting Architecture"]

AppleScript (AS) 和 JavaScript for Automation (JXA) 套件都具有类似的自动化覆盖范围。AppleScript 桥梁更加成熟。JavaScriptCore 引擎有更多的内置功能。例如,正则表达式、encodeURI、JSON.stringify 等功能已经内置到 JavaScriptCore 中。

| 特色 | 作为 | 江西汽车 |
|-----------------------------|------------|------ -----|
| 脚本字典 | ✓ | ✓ |
| 标准脚本添加 | ✓ | ✓ |
| JavaScriptCore | - | ✓ |
| Apple 事件脚本 | ✓ | ✓ |
| 可可脚本 | ✓ | ✓ |
| C 函数绑定 | - | ✓ |
| 自动化支持 | ✓ | ✓ |
| #!外壳可运行 | ✓ | ✓ |
| 调试器 | 第三方 | - |
| 语言流行度 | 利基 | 广泛 |

这是否意味着我不必再学习 AppleScript 来编写脚本了……?

也许是的。

有时阅读现有的 AppleScript 示例会很有帮助。不过,有时扔掉 AppleScript 文件并在没有预先设想的方法的情况下开始会更有效率。

顺便说一句:您仍然需要了解使用的任何脚本语言的脚本字典。

从想要让应用程序自动执行操作的应用程序用户的角度来看?

作为应用程序用户,适用于自动化的 JavaScript 将使用前面提到的警告。特别是,考虑使用更多的 JavaScript 和 Cocoa 功能和更少的“Apple Events”功能。

例如,“传统的“系统事件”方法具有简单的优点,但使用$.NSFileManager会显着提高性能。” 在一个用例$.NSFileManager中,它比“系统事件”快 300%。[JXA-Cookbook Wiki:获取文件夹内容列表]

...关于应用程序开发人员(可可)?如果他们想让他们的应用程序可编写脚本,他们可以不学习 AppleScript 吗?

是和否。

开发人员控制的是通过脚本字典公开的对象和方法。此脚本字典 (.sdef) 必须由任何脚本语言(包括 Perl、Python 和 Ruby)访问。

因此,在幕后,开发人员提供了一个以 Objective-C/Cocoa 为中心且通常与脚本语言无关的应用程序脚本网关。

开发人员无法控制的是脚本桥(例如 Cocoa Scripting、Apple Events、ObjC、C Function Binding)。向Apple Bug Reporter报告脚本桥错误。

一个有责任心的开发人员将拥有一个测试套件,通过对其客户重要的所有脚本语言来运行应用程序脚本字典。良好的测试覆盖率将是自动化的,并且可能使用多种脚本语言。

... 已经知道 JavaScript,有什么好的理由我应该再学习 AppleScript 吗?

在产生更多的 JXA 文档之前,一些现有的 AppleScript 材料可能有助于解释脚本架构的各个方面。

现有的 AppleScript 自动化,具有熟练的 AppleScript 专业知识,在创收工作流中,可能希望在何时采用 JXA 时保持保守。

如果您已经了解 JavaScript 并且自动化是为您个人准备的,那么 JXA(带有注意事项)似乎是一个合理的选择。

更新:Apple 现在普遍发布了Mac 自动化脚本指南

2016 年 10 月 27 日修订。介绍使用 AppleScript 和 JavaScript 的新文档。

修订 2018-06-07。新文档介绍了使用 AppleScript 和 JavaScript 在 OS X 中简化工作流程和提高工作效率。

2019 年更新:Mac 自动化脚本指南现在是一个存档文档

于 2015-05-02T22:18:50.193 回答