我有一本关于AppleScript的书,我想知道我是否应该保留。我已经知道了JavaScript。
据我所知,Apple最近在OS X中添加了JavaScript脚本支持。
这是否意味着我不再需要学习AppleScript来为OS X应用程序编写脚本,还是比它更多?你的想法将不胜感激。
以上问题来自应用用户,他希望让应用自动执行此操作。
关于应用开发者(Cocoa)的事情怎么样?如果他们想让他们的应用程序可编写脚本,他们可以不学习AppleScript吗?
更新:添加了赏金。问题被重新定义(对AppleScript及其用户没有任何不尊重):鉴于我已经了解JavaScript,我还有什么理由学习AppleScript吗?您对此事的详细想法将不胜感激。
答案 0 :(得分:10)
AppleScript现在可以用JavaScript代替吗?
对于琐碎的事情,可能。除此之外,可能不是。
在JXA中,太多Apple事件/ OSA功能完全瘫痪,损坏或丢失。它可以达到一定程度,但除此之外你还可以填充。对于认真或生产工作,当需要JXA搞砸的功能,或者处理使JXA逃跑和哭泣的应用程序时,您将不得不坚持使用AppleScript:它是目前唯一支持的解决方案右。
您仍需要了解应用程序脚本的工作原理,您必须阅读AppleScript文档。 JXA自己的文档是可悲的,误导性的错误,所以你不会因为阅读它而变得更聪明。没有第三方JXA文献可以解释这些概念,而且未来出现的任何文章都可能是错误的错误。 (哎呀,即使是现在的AppleScript书也往往会捏造/撒谎/弄错。)
您还需要了解如何编写特定应用程序的脚本,而应用程序字典本身就是不完整和不充分的。这意味着您依赖于补充文档(如果存在),示例脚本以及这些应用程序的更有经验的用户。所有这些都是基于AppleScript的,因此您需要了解一些AppleScript才能理解并与之通信。
应用程序开发人员应该继续针对AppleScript开发和测试他们的应用程序 - 它是事实上的规范,在过去的二十年中,所有可编写脚本的应用程序都是针对这些规范开发和测试的,并且情况将继续如此。即使JXA不是这样的傻瓜,开发者仍然需要对AS进行测试,以确保他们不会忽视那里的任何怪癖。
答案 1 :(得分:4)
自动化JavaScript(JXA)1.0就足够了。使用JXA 1.0,您可能需要执行以下操作:
whose
网桥查询不起作用时创建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中。
| 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