问题标签 [javascript-automation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
480 浏览

javascript - 使用 JXA 以编程方式创建和填充 NSWindow

我最近了解到 JavaScript for Automation 的存在。对我来说更有趣的是调用 Objective-C API 的能力,JavaScript 中的 Objective-C 类的子类,以及将 JavaScript 实现的子类的对象传递回使用父类作为接口定义的 Objective-C API 的能力。

我遇到的最大问题是我并不完全了解 Objective-C,而我知道这一点。这就是我为此使用 JXA 的部分原因(主要原因是我发现你甚至可以使用 JavaScript for Automation 来完成这一切,这非常有趣。)

我也不知道 Cocoa API,但我正在尝试通过 JXA 学习它。

那么,我将如何使用 JXA 创建和填充 JavaScript 窗口?

我到目前为止的代码是:

除了 Apple 在 JXA 文档中提供的关于 Objective-C 绑定的片段之外,几乎没有任何示例。

那么有人可以告诉我如何用 JXA 设计一个基本的窗口,也许还有一个标签、文本框和按钮?

0 投票
1 回答
410 浏览

macos - javascript 自动化点击 iTunes 中的下载按钮

我需要使用 JXA 以编程方式从 iTunes 下载应用程序。我做了以下事情:

没有选择任何元素。我试过点击按钮[0...7],但没有一个是“获取”按钮。我假设我需要的按钮在文档中,但 JXA 文档明确指出按钮元素是 Window 的子元素,而不是 Document 的子元素。关于如何点击正确按钮的任何想法?

0 投票
3 回答
758 浏览

objective-c - JXA:从 CoreServices 访问 CFString 常量

JXA及其内置的 ObjC 桥,通过对象Foundation自动从框架中公开枚举和常量;$例如:

但是,CFString在较低级别的 API 中也有一些有用的常量不会自动导入,即定义常用UTIkUTType*值的常量,例如UTI 。CoreServiceskUTTypeHTML"public.html"

虽然您可以使用导入它们ObjC.import('CoreServices'),但它们的字符串值不能(容易)访问,大概是因为它的类型是CFString[Ref]

我还没有找到一种方法来获取返回的核心字符串ObjC.unwrap($.kUTTypeHTML)不起作用,ObjC.unwrap($.kUTTypeHTML[0])(也不.deepUnwrap())也不起作用。

我想知道:

  • 如果有一种本地 JXA 方法可以做到这一点,我就错过了。
  • 否则,如果无法使用ObjC.bindFunction()来定义可以解决问题的函数的绑定CFString*(),例如 toCFStringGetCString()CFStringGetCStringPtr(),但对我来说如何翻译 ObjC 签名并不明显。
0 投票
1 回答
582 浏览

macos - 使用 JXA 将曲目添加到 iTunes 播放列表

我正在尝试为自动化脚本构建一个简单的 JavaScript,以将 iTunes 中当前正在播放的曲目添加到特定的播放列表中。

我将播放列表名称存储为字符串,var playlist.

JXA 库的 add 方法说明如下:

add 方法:将一个或多个文件添加到播放列表

添加文件列表:要添加的文件

[to: location specifier] : 添加文件的位置

→ 轨道:引用添加的轨道

我不知道该放什么[to: location specifier]来指定播放列表。

我试过:

但我得到“错误 -1708:消息不理解”。

0 投票
1 回答
321 浏览

applescript - 在击键时更快地运行 AppleScript 或 JXA 脚本

当从任何应用程序按下按键时,尝试运行 JXA 脚本(基本上是 AppleScript)。通过使用 Automator 并创建一个在按下某个按键时激活(并运行脚本)的服务来使其工作。

这种方法的问题在于,在按下按键后脚本需要大约半秒才能真正运行。对于大多数脚本来说这不是问题,但我正在尝试在响应性很重要的游戏中使用脚本。

我想我实际上需要让脚本“监听”击键,然后在按下击键时运行适当的函数,但不确定这是否可能。

有没有人对此有任何想法,无论是使我想要的工作,还是从可以在程序之间交互的击键中运行脚本的不同方法。

0 投票
1 回答
201 浏览

objective-c - 我们如何从 OS X JXA 中读取/强制 CFArray 和 CFString 等值?

如果您尝试通过 ObjC 桥读取/设置 OSX 输入语言,请编写如下代码段:

我们很快就会得到 CF 类型的 obj 引用返回值。在 ObjC 本身中,这些可以强制转换为 NS 值。知道如何在 JavaScript for Applications 中实现这一点吗?

(我正在获取 CF 对象引用返回值,但我没有成功从中提取字符串或其他原始值)

0 投票
1 回答
1792 浏览

macos - 使用 OS X JavaScript for Automation (JXA) 收听“开放位置”Apple Event

我正在使用 OS X JavaScript for Automation (JXA),并且我希望能够捕获“开放位置”Apple 事件。

根据http://www.macosxautomation.com/applescript/linktrigger/,我设置了一个客户 URL 处理程序。我该怎么做

与 JXA?我尝试了以下所有方法,但无法执行它们中的任何一个:

Apple 的 JXA 文档(https://developer.apple.com/library/mac/releasenotes/InterapplicationCommunication/RN-JavaScriptForAutomation/Articles/OSX10-10.html#//apple_ref/doc/uid/TP40014508-CH109-SW15)不要t 讨论如何处理开放位置事件。我的脚本会被打开,因为如果我将它添加到函数之外,我会得到一个显示的警报。我只是无法获得执行并在 URL 中传递的函数。

我正在通过一个 AppleScript 处理程序来解决这个问题,该处理程序然后调用我的 JXA 代码,但这肯定不太理想。

我也没有在 JXA Cookbook ( https://github.com/dtinth/JXA-Cookbook ) 中看到任何关于此的内容。

0 投票
2 回答
683 浏览

macos - OS X Javascript Automation (JXA) Progress Bar

In an Applescript applet, progress can be shown like so:

How would you access progress description, progress additional description, and progress total steps in Javascript for Automation (JXA)?

0 投票
1 回答
1178 浏览

javascript - 使用 `runScript` 函数运行 JXA 脚本不允许参数

我使用 JXA 为Alfred 2编写工作流脚本,最近尝试从另一个脚本中运行一个脚本。我需要在脚本之间传递一些文本,所以我决定使用参数,但是每当我尝试传递一个字符串、一个数字、一个数组或其他任何不是它的对象时,它都会给出错误“ Error on line 4: Error: An error occurred.”。如果我确实传递了一个对象,那么第二个脚本(由第一个脚本运行的那个)会收到一个空对象,而不是传递给它的那个。当第一个脚本是 AppleScript 时也会发生同样的情况,但如果第二个脚本是 AppleScript,则一切正常。osascript从命令行传递参数也可以。API是否损坏或我做错了什么?

第一个脚本:

第二个脚本:

编辑:

如果第二个脚本编辑如下,会显示对话框,但runScript第一个脚本的方法仍然返回错误。

编辑2:

除了参数问题之外,该runScript函数实际上似乎运行良好。错误实际上并没有被抛出,只是由脚本编辑器显示,并且在调用之后继续执行,runScript就好像什么都没发生一样。尽管参数不起作用,但返回的值也可以正常工作。

关于 Alfred 2 工作流程的说明

要在 Alfred 2 中运行某些代码(由搜索、键盘命令等触发),必须将其输入到应用程序的框中,而不是文件中。 输入代码的框非常小,不提供语法高亮,这使得编辑代码变得困难和烦人。对于较小的文件,没关系,但对于较大的文件,使用短脚本运行脚本文件更容易。我试过 Bash,这将是最简单的选项,但 Alfred 2 没有提供转义单引号的选项。我也不能使用脚本库(据我所知,如果我错了,请纠正我),因为代码不在脚本包中,并且所有必需的文件都需要在同一个文件夹中(出于导出原因)。

0 投票
3 回答
1226 浏览

macos - 如何使用 JXA 关闭所有 Finder 窗口

我基本上想将此代码从 AS 移植到 JXA:

提前致谢!关于 JXA 的信息太少了!