javascript - 如何将 AppleScript/JXA 支持添加到非可可应用程序?
问题描述
我正在研究我可以为开源做出贡献的东西。我使用的许多 FOSS 应用程序的一个痛点是它们不支持脚本。我认为至少尝试为我使用的一些应用程序(例如 OBS)添加一些基本的脚本支持会很好。
但是,所有添加脚本支持的指南都假设有问题的应用程序是用 Cocoa 编写的。我正在查看的许多 FOSS 应用程序是……不是。是否有人有一些很好的资源可以将非本地功能公开给本地系统服务,就像脚本所需要的那样?
解决方案
实现非平凡的Apple 事件支持是正确的 PITA;如果你必须在 C/C++ 中从头开始实现它(CocoaScripting.framework 对于非 Cocoa 应用程序来说是一个非入门者,任何第三方框架都将大量过时)。现在我什至不会尝试:AppleScript 正在消亡,JXA 已经消亡,Apple 对 Mac 自动化未来的计划(如果有的话)保持沉默。如果/当快捷方式来到 macOS 时,这可能会改变,但这不会在 10.15 之前发生。
如果您只想添加真正基本的自动化支持(即没有“对象模型”,只需像play FILE
/之类的简单命令convert FILE
)并且该应用程序可以很好地与 macOS 事件循环配合使用,那么安装 Apple 事件处理程序并不是非常困难(尽管仍然非常乏味)并通过旧的 C Apple Event Manager API 解压和打包简单的参数和结果(数字、字符串)。它不会非常“AppleScript-ish”,但至少它是可以实现的。或者,如果应用程序已经有自己的内置(例如 JavaScript)脚本支持,那么实现一个do script CODE [with parameters {ARG1,ARG2,…}]
处理程序来调用它是一个容易的胜利。
就文档和示例代码而言,搜索AEInstallEventHandler
并查看出现了什么。不会很好,但这已经很好了。准备好为自己弄清楚很多这些东西。
推荐阅读
- php - 检测我们是否在页面的索引中(PHP)
- java - Maven 解决方案可以有多语言项目吗?(Java、Python、Scala)
- javascript - 如何使用 useMemo 挂钩来记忆孩子
- android - GooglePlayGames 0.9.64 x Unity 2018.4.2f1 AppCrash
- grpc - Encountered end-of-stream mid-frame 当它在 GRPC 服务器上吐出时是什么意思?
- ruby-on-rails - 如何使用 Swagger Block on Rails 设置参数组中所需的单个参数?
- node.js - 将 mediarecorder blob 转换为谷歌语音到文本可以转录的类型
- javascript - 如何在 Rollup 中配置从多个输入文件仅生成单个输出文件?
- solidity - 如何使用 web3 库发送 ERC20 令牌
- php - 从来自 Oracle12c db 的日期中删除字符串