AppleScript现在可以用JavaScript取代吗?

sta*_*ser 15 cocoa applescript javascript-automation

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

据我所知,Apple最近在OS X中添加了JavaScript脚本支持.

这是否意味着我不再需要学习AppleScript来为OS X应用程序编写脚本,还是比它更多呢?你的想法将不胜感激.

上述问题是从想要让应用程序自动执行操作的应用程序用户的角度出发的.

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

更新:添加了赏金.问题被重新定义(对AppleScript及其用户没有任何不尊重):鉴于我已经了解JavaScript,我还有什么理由学习AppleScript吗?您对此事的详细想法将不胜感激.

foo*_*foo 11

AppleScript现在可以用JavaScript取代吗?

对于琐碎的事情,可能.除此之外,可能不是.

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

  2. 您仍然需要了解应用程序脚本的工作原理,您必须阅读AppleScript文档.JXA自己的文档是可悲的,误导性的错误,所以你不会因为阅读它而变得更聪明.没有第三方JXA文献可以解释这些概念,而且未来出现的任何一个都可能是错误的错误.(哎呀,即使是现在的AppleScript书也往往会捏造/撒谎/弄错.)

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

  4. 应用程序开发人员应该继续针对AppleScript开发和测试他们的应用程序 - 它是事实上的规范,所有可编写脚本的应用程序在过去的二十年中已经开发和测试,并且情况将继续如此.即使JXA不是那么多的傻瓜,开发者仍然需要对AS进行测试,以确保他们不会忽视那里的任何怪癖.


l -*_*c l 5

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

  1. 当JXA到传统的AppleEvents *桥不起作用时,使用JXA到ObbC桥,
  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,“开放脚本架构”]

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

| 功能| AS | JXA |
| ------------------------------ | ----------- | ------ ----- |
| 脚本字典| ✓| ✓|
| 标准脚本添加| ✓| ✓|
| JavaScriptCore | ‐ | ✓|
| Apple事件脚本| ✓| ✓|
| 可可脚本 ✓| ✓|
| C函数绑定| ‐ | ✓|
| 自动化器支持| ✓| ✓|
| #!可运行的外壳| ✓| ✓|
| 调试器 第三党| ‐ |
| 语言流行度| 利基| 广泛|

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

也许是吧。

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

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

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

作为应用程序用户,JavaScript for Automation可以解决前面提到的警告。特别是,考虑使用更多的JavaScript&Cocoa功能和更少的“ Apple Events”功能。

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

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

是和否

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

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

开发人员无法控制的是脚本桥(例如,可可脚本,Apple Events,ObjC,C函数绑定)。将脚本桥接错误报告给Apple Bug Reporter

谦虚的开发人员将拥有一个测试套件,以通过对客户重要的所有脚本语言来练习应用程序“脚本字典”。一个好的测试覆盖范围将是自动化的,并且可能使用多种脚本语言。

...已经了解JavaScript,是否有充分的理由我应该再学习AppleScript?

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

现有的AppleScript自动化,以及熟练的AppleScript专业知识,可用于增加收入的工作流中,可能希望在何时采用JXA方面保持保守。

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

更新:Apple现在通常已经发布了《Mac Automation脚本指南》

修订2016-10-27。新文档提供了有关使用AppleScript和JavaScript的介绍。

修订2018-06-07。新文档介绍了如何使用AppleScript和JavaScript简化工作流程并提高OS X的生产率。

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