【发布时间】:2015-02-11 15:24:16
【问题描述】:
我在 OS X Yosemite 上使用 JavaScript 实现自动化。
我正在尝试在终端应用程序中打开一个新选项卡。这是我到目前为止所得到的:
var Terminal = Application('Terminal);
var Tab = Terminal.Tab;
// Activate the Terminal App, creates a new window if there isn't one already
Terminal.activate();
// This contains all the windows
Terminal.windows;
// This contains the first window
Terminal.windows.at(0) // alternatively, Terminal.windows[0]
// This contains the tabs in the first window
Terminal.windows.at(0).tabs
Terminal.windows.at(0).tabs 本质上是一个数组。它有一个.push 方法。我假设我可以使用以下语句向窗口添加选项卡:
Terminal.windows.at(0).tabs.push(new Tab());
但它会引发一个非常普遍的错误:
Error -10000: AppleEvent handler failed.
文档严重缺乏,我认为这个用于自动化的 JavaScript 只是让 JavaScript 开发人员参与进来的一个噱头。
注意:我见过的 AppleScript 解决方案基本上只是告诉 System Events 应用程序按 Command + T 打开一个新选项卡。这感觉很 hacky,并在那里硬编码了 Command + T。
【问题讨论】:
-
"Terminal.windows.at(0).tabs 本质上是一个数组" -- 这是不正确的。它实际上是一个查询对象(“对象说明符”),描述了窗口对象与其选项卡对象之间的一对多关系。 (JXA 的实现是 FUBAR,它的文档存在,Apple 对用户的支持几乎不存在。欢迎。)虽然这次真正的罪魁祸首是 Terminal 蹩脚的 Apple 事件接口:它的
make命令完全被破坏并且已经存在多年.所以你要么不得不求助于 GUI 脚本,要么让自己成为一个更好的终端仿真器应用程序,比如 iTerm。对不起。
标签: applescript osx-yosemite javascript-automation