AppleScript现在可以用JavaScript取代吗?

时间:2014-11-10 16:32:32

标签: cocoa applescript javascript-automation

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

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

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

以上问题来自应用用户,他希望让应用自动执行此操作。

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

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

2 个答案:

答案 0 :(得分:10)

  

AppleScript现在可以用JavaScript代替吗?

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

  1. 在JXA中,太多Apple事件/ OSA功能完全瘫痪,损坏或丢失。它可以达到一定程度,但除此之外你还可以填充。对于认真或​​生产工作,当需要JXA搞砸的功能,或者处理使JXA逃跑和哭泣的应用程序时,您将不得不坚持使用AppleScript:它是目前唯一支持的解决方案右。

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

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

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

答案 1 :(得分:4)

如果您愿意成为早期采用者并愿意灵活采用何种实施方法,那么

自动化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端
  4. * 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中。

    |  Feature                     |    AS     |    JXA    |
    |------------------------------|-----------|-----------|
    | Scripting Dictionary         |     ✓     |     ✓     |
    | Standard Scripting Additions |     ✓     |     ✓     |
    | JavaScriptCore               |     ‐     |     ✓     |
    | Apple Event Scripting        |     ✓     |     ✓     |
    | Cocoa Scripting              |     ✓     |     ✓     |
    | C function binding           |     ‐     |     ✓     |
    | Automator Support            |     ✓     |     ✓     |
    | #! shell runable             |     ✓     |     ✓     |
    | Debugger                     | 3rd Party |     ‐     |
    | Language Popularity          |  Niche    |   Broad   |
    
      

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

    也许是的。

    有时阅读现有的AppleScript示例很有帮助。虽然,有时候抛出AppleScript文件并且没有预先设想的方法就可以开始工作。

    BTW:您仍然需要了解脚本词典中使用的任何脚本语言。

      

    应用用户的角度来看,谁想让应用自动执行此操作?

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

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

      

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

    是和否。

    开发人员控制的是对象&通过Scripting Dictionary暴露的方法。必须完成此脚本字典(.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 Automation Scripting Guide

      

    修订2016-10-27。新文档,介绍如何使用AppleScript和JavaScript