问题标签 [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.
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 设计一个基本的窗口,也许还有一个标签、文本框和按钮?
macos - javascript 自动化点击 iTunes 中的下载按钮
我需要使用 JXA 以编程方式从 iTunes 下载应用程序。我做了以下事情:
没有选择任何元素。我试过点击按钮[0...7],但没有一个是“获取”按钮。我假设我需要的按钮在文档中,但 JXA 文档明确指出按钮元素是 Window 的子元素,而不是 Document 的子元素。关于如何点击正确按钮的任何想法?
objective-c - JXA:从 CoreServices 访问 CFString 常量
JXA及其内置的 ObjC 桥,通过对象Foundation
自动从框架中公开枚举和常量;$
例如:
但是,CFString
在较低级别的 API 中也有一些有用的常量不会自动导入,即定义常用UTIkUTType*
值的常量,例如UTI 。CoreServices
kUTTypeHTML
"public.html"
虽然您可以使用导入它们ObjC.import('CoreServices')
,但它们的字符串值不能(容易)访问,大概是因为它的类型是CFString[Ref]
:
我还没有找到一种方法来获取返回的核心字符串:
ObjC.unwrap($.kUTTypeHTML)
不起作用,ObjC.unwrap($.kUTTypeHTML[0])
(也不.deepUnwrap()
)也不起作用。
我想知道:
- 如果有一种本地 JXA 方法可以做到这一点,我就错过了。
- 否则,如果无法使用
ObjC.bindFunction()
来定义可以解决问题的函数的绑定CFString*()
,例如 toCFStringGetCString()
或CFStringGetCStringPtr()
,但对我来说如何翻译 ObjC 签名并不明显。
macos - 使用 JXA 将曲目添加到 iTunes 播放列表
我正在尝试为自动化脚本构建一个简单的 JavaScript,以将 iTunes 中当前正在播放的曲目添加到特定的播放列表中。
我将播放列表名称存储为字符串,var playlist
.
JXA 库的 add 方法说明如下:
add 方法:将一个或多个文件添加到播放列表
添加文件列表:要添加的文件
[to: location specifier] : 添加文件的位置
→ 轨道:引用添加的轨道
我不知道该放什么[to: location specifier]
来指定播放列表。
我试过:
但我得到“错误 -1708:消息不理解”。
applescript - 在击键时更快地运行 AppleScript 或 JXA 脚本
当从任何应用程序按下按键时,尝试运行 JXA 脚本(基本上是 AppleScript)。通过使用 Automator 并创建一个在按下某个按键时激活(并运行脚本)的服务来使其工作。
这种方法的问题在于,在按下按键后脚本需要大约半秒才能真正运行。对于大多数脚本来说这不是问题,但我正在尝试在响应性很重要的游戏中使用脚本。
我想我实际上需要让脚本“监听”击键,然后在按下击键时运行适当的函数,但不确定这是否可能。
有没有人对此有任何想法,无论是使我想要的工作,还是从可以在程序之间交互的击键中运行脚本的不同方法。
objective-c - 我们如何从 OS X JXA 中读取/强制 CFArray 和 CFString 等值?
如果您尝试通过 ObjC 桥读取/设置 OSX 输入语言,请编写如下代码段:
我们很快就会得到 CF 类型的 obj 引用返回值。在 ObjC 本身中,这些可以强制转换为 NS 值。知道如何在 JavaScript for Applications 中实现这一点吗?
(我正在获取 CF 对象引用返回值,但我没有成功从中提取字符串或其他原始值)
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 ) 中看到任何关于此的内容。
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)?
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 没有提供转义单引号的选项。我也不能使用脚本库(据我所知,如果我错了,请纠正我),因为代码不在脚本包中,并且所有必需的文件都需要在同一个文件夹中(出于导出原因)。
macos - 如何使用 JXA 关闭所有 Finder 窗口
我基本上想将此代码从 AS 移植到 JXA:
提前致谢!关于 JXA 的信息太少了!