问题标签 [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 回答
361 浏览

shell - 具有管理员权限的 JXA 等效项

在 AppleScript 中,您可以:

对不起。无论如何,可以像这样在 JXA 中运行 shell 脚本:

with administrator privileges但是,在 JXA 中似乎没有等价物。有没有我错过的,或者我应该怎么做?并且不要告诉我使用 sudo。它行不通。

0 投票
2 回答
477 浏览

objective-c - 为什么 OSA_LIBRARY_PATH 不能像 JXA 记录的那样工作?

根据Apple 的开发人员文档Library全局允许导入已编译的脚本,以便它们可以用作当前脚本中的库。myLibName.scpt如果您要执行以下代码之类的操作,则此方法很好用~/Library/Script Libraries

但是,文档还声称可以导出一个环境变量——OSA_LIBRARY_PATH包含一串:分隔路径——Library()然后在继续使用它的默认路径之前~/Library/Script Libraries遵循该路径列表:你知道,就像 bash 环境变量一样Path。这是下面的相关文档;它描述了路径层次结构:

脚本成为脚本库的基本要求是它的位置:它必须是以下文件夹之一中“脚本库”文件夹中的脚本文档。搜索库时,按列出的顺序搜索位置,并使用第一个匹配的脚本:

  1. 如果引用该库的脚本是一个包,则该脚本的包资源目录。这意味着脚本可以与它们使用的库一起打包和分发。
  2. 如果运行脚本的应用程序是一个包,则应用程序的包资源目录。这意味着脚本应用程序(“applet”和“droplets”)可以与它们使用的库一起打包和分发。它还使运行脚本的应用程序能够提供供这些脚本使用的库。
  3. 在环境变量 OSA_LIBRARY_PATH 中指定的任何文件夹。这允许使用库而不将其安装在通常的位置之一。该变量的值是以冒号分隔的路径列表,例如 /opt/local/Script Libraries:/usr/local/Script Libraries。与其他库位置不同,OSA_LIBRARY_PATH 中指定的路径完全按原样使用,无需附加“脚本库”。在 OS X v10.11 及更高版本中受支持。
  4. 用户主目录 ~/Library 中的 Library 文件夹。这是安装库以供单个用户使用的位置,并且是库开发期间的推荐位置。
  5. 计算机库文件夹 /Library。位于此处的库可供计算机的所有用户使用。
  6. 网络库文件夹 /Network/Library。位于此处的库可供网络上的多台计算机使用。
  7. 系统库文件夹 /System/Library。这些是 OS X 提供的库。
  8. 任何已安装的应用程序包,位于应用程序的包库目录中。这允许分发与应用程序相关联的库,或创建仅用于分发库的应用程序。在 OS X v10.11 及更高版本中受支持。

问题是它不起作用。我尝试OSA_LIBRARY_PATH通过我的文件全局导出变量,然后通过脚本编辑器和可执行文件.zshrc运行一个示例脚本,就像上面的脚本一样。osascript没有任何作用;我收到“找不到文件”错误。我在网上找到了这个主题——参与者放弃希望的地方;它没有太多解释。有什么想法吗?

在一些相关的说明中,Scripting Additions套件提供了另外两种方法——loadScript而且storeScript——它们似乎在这里可能有用。不幸的是,当您尝试使用它们时,osascript会给您手指。不过,我确实设法从使用loadScript. 无论如何,你们可以对此发表的任何见解将不胜感激。谢谢。

0 投票
2 回答
630 浏览

javascript - JXA 将消息移动到不同的文件夹/邮箱

我一直在使用 Apple 的脚本编辑器编写 JXA 脚本。本质上,我想浏览我的收件箱文件夹并将超过 44 天的邮件移动到存档文件夹。我能够找到该帐户,以及我的收件箱和存档“邮箱”,但我一生都无法弄清楚如何将该死的消息移动到新邮箱。

这是我到目前为止所拥有的:

我可以在脚本编辑器的字典帮助中看到 Message 对象具有邮箱属性,但以下似乎都不起作用:

任何帮助将不胜感激。

0 投票
1 回答
247 浏览

javascript - 可以在 Applescript 中执行内联 JavaScript 语句吗?

我知道您可以使用tellChrome 或 Safari do JavaScript(或完全用 JS 编写... à la JXA),但在回答另一个问题时,我很好奇...

有没有办法在 AppleScript 中任意执行内联 JavaScript 语句(无需tell另一个进程)?

到目前为止,我只使用过这样的东西(在 AppleScript 中):

但这似乎是一个愚蠢的解决方法

0 投票
2 回答
536 浏览

macos - OS X - JavaScript for Automation - 如何创建和存储变量以供将来使用

我正在创建一个小程序,它将帮助自动化虚拟环境的初始化和 Django 服务器的启动。我想与其他人分享这个程序。

我正在寻找一种方法来通过使用打开的文件浏览器创建变量(文件夹的位置)并存储该变量,以便用户将来不必输入它。

如何在我的程序中存储新信息以备将来使用?我调查了 plist 文件的使用,但在任何地方都找不到任何文档。谢谢你的帮助!

0 投票
0 回答
165 浏览

cocoa - JXA 创建应用委托会导致应用崩溃

我正在尝试为使用 JavaScript for Automation 编写的小型应用程序创建停靠菜单。这是我正在使用的代码的精简版本:

如果您将其粘贴到 Apple 脚本编辑器中,将其保存为应用程序并运行它,您将在右键单击停靠图标时看到新的菜单项(有时停靠菜单在您激活另一个应用程序之前不会出现。 )

问题是; 单击 Dock 中的应用程序图标或退出应用程序将导致它在控制台中崩溃:

看起来有些东西正在尝试调用handleEvent:withReply:error:,这在 NSApplicationDelegate 协议中没有定义。

任何想法是什么导致了这种行为?

0 投票
1 回答
335 浏览

javascript - 如何将操作数组作为文本返回到 TextEdit?

我是 JXA 的新手,我正在尝试学习如何在 TextEdit 中做一些非常基本的事情。我知道如何将文档的段落作为数组获取:

app = Application('TextEdit')
docPars = app.documents[0].paragraphs()

然后,说,排序。但我不知道如何将它作为数组发送回TextEdit(即TE 文档中的多个段落)。

TIA

0 投票
1 回答
417 浏览

javascript - 在 OS X (El Capitan) 上从 JavaScript 发送和接收“原始”Apple 事件

我正在尝试利用 OS X (10.11) 中的新JavaScript 自动化功能来编写不提供字典的应用程序的脚本。我有一个使用原始 Apple 事件与该应用程序交互的 AppleScript,如下所示:

现在我的问题是:如何将其翻译成 JavaScript?我找不到有关 Javascript OSA API 发送和接收原始 Apple 事件的任何信息。

一种可能的解决方法可能是通过 shell 调用一段 AppleScript,但我更喜欢使用“真正的”API。

0 投票
1 回答
267 浏览

javascript - 有没有更好的方法通过 Javascript for Automation (JXA) 向 iTunes 添加新的播放列表?

必须有更好的方法在集合中创建新元素(如果这就是抽象背后真正发生的事情)。

我正在寻找这个applescript的JXA等价物

我已经尝试了很多东西,但无法获得等效的东西。我能得到的最接近的是复制现有的播放列表,然后重命名它......

欢迎提供有关测试播放列表是否存在或选择要复制的播放列表的最简洁方法的任何提示。像大多数人一样,由于 JXA 文档的严重缺乏,我正在通过实验找出大部分应用程序交互的东西。

不过,我的主要问题是是否有一种方法可以创建一个空的播放列表而不必复制一个。没关系,我猜我是否有解决办法,但感觉就像是一个杂物。

0 投票
1 回答
71 浏览

javascript - 什么是克服错误的更优雅的方法:期望对象说明符。通过 JXA 通过 Messages 发送 SMS 时,参数没有对象说明符

这不起作用

错误:期望对象说明符。参数没有对象说明符。

文本有效且不为空。电话有效且不为空。如果我对它的值进行硬编码。我决定尝试有效的“动态”硬编码。

有没有更优雅的方法来克服这个问题?为什么 eval 可以工作,但带有变量的代码却不行?