【问题标题】:Can AppleScript now be replaced with JavaScript?AppleScript 现在可以用 JavaScript 代替吗?
【发布时间】:2015-01-07 00:44:22
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • OSA 与语言无关。

标签: cocoa applescript javascript-automation


【解决方案1】:

AppleScript 现在可以用 JavaScript 代替吗?

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

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

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

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

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

【讨论】:

  • 2021 年有什么更新吗? JXA 取代了 AS 吗?我找不到太多关于其中任何一个的当前信息。是否存在人们正在使用的另一种 OS X 脚本语言?
【解决方案2】:

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

  1. 当 JXA-to-traditional-AppleEvents* 桥不起作用时,使用 JXA-to-ObjC 桥,
  2. 当 JXA 1.0 whose 桥查询不起作用时创建一个 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 引擎有更多的内置功能。例如,regex、encodeURI、JSON.stringify 等功能已经内置到 JavaScriptCore 中。

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

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

也许是的。

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

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

从希望让应用自动执行操作的应用用户的角度来看?

作为应用用户,JavaScript for Automation 将使用前面提到的注意事项。特别是,考虑使用更多的 JavaScript 和 Cocoa 功能,减少“Apple Events”功能。

例如,“传统的“系统事件”方法具有简单的优点,但使用$.NSFileManager 可以显着提高性能。”在一个用例中,$.NSFileManager 比“系统事件”快 300%。 [JXA-Cookbook Wiki : Getting a List of Folder Contents]

...关于应用开发者 (Cocoa)?如果他们想让他们的应用程序可编写脚本,他们可以不学习 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 年 6 月 7 日修订。新文档介绍了如何使用 AppleScript 和 JavaScript 在 OS X 中简化工作流程并提高工作效率。

2019 年更新:Mac Automation Scripting Guide is now an archive document

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-30
    • 2019-06-03
    • 2016-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多