我使用 JXA 为Alfred 2编写工作流脚本,最近尝试从另一个脚本中运行一个脚本。我需要在脚本之间传递一些文本,所以我决定使用参数,但是每当我尝试传递一个字符串、一个数字、一个数组或其他任何不是它的对象时,它都会给出错误“ Error on line 4: Error: An error occurred.
”。如果我确实传递了一个对象,那么第二个脚本(由第一个脚本运行的那个)会收到一个空对象,而不是传递给它的那个。当第一个脚本是 AppleScript 时也会发生同样的情况,但如果第二个脚本是 AppleScript,则一切正常。osascript
从命令行传递参数也可以。API是否损坏或我做错了什么?
第一个脚本:
var app = Application.currentApplication();
app.includeStandardAdditions = true;
app.runScript(new Path("/path/to/second/script.scpt"), { withParameters: "Hello World!" });
第二个脚本:
function run(args) {
return args;
}
编辑:
如果第二个脚本编辑如下,会显示对话框,但runScript
第一个脚本的方法仍然返回错误。
function run(args) {
var app = Application.currentApplication();
app.includeStandardAdditions = true;
app.displayDialog(args.toString());
return args;
}
编辑2:
除了参数问题之外,该runScript
函数实际上似乎运行良好。错误实际上并没有被抛出,只是由脚本编辑器显示,并且在调用之后继续执行,runScript
就好像什么都没发生一样。尽管参数不起作用,但返回的值也可以正常工作。
关于 Alfred 2 工作流程的说明
要在 Alfred 2 中运行某些代码(由搜索、键盘命令等触发),必须将其输入到应用程序的框中,而不是文件中。
输入代码的框非常小,不提供语法高亮,这使得编辑代码变得困难和烦人。对于较小的文件,没关系,但对于较大的文件,使用短脚本运行脚本文件更容易。我试过 Bash,这将是最简单的选项,但 Alfred 2 没有提供转义单引号的选项。我也不能使用脚本库(据我所知,如果我错了,请纠正我),因为代码不在脚本包中,并且所有必需的文件都需要在同一个文件夹中(出于导出原因)。