编程语言
首页 > 编程语言> > javascript – 使用`runScript`函数运行JXA脚本不允许使用参数

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

作者:互联网

我使用JXA编写Alfred 2的工作流脚本,最近尝试从另一个脚本中运行脚本.我需要在脚本之间传递一些文本,所以我决定使用参数,但每当我尝试传递一个字符串,一个数字,一个数组或其他不是它的对象时,它会给出错误“Error on第4行:错误:发生错误.“如果我确实传递了一个对象,则第二个脚本(由第一个脚本运行的脚本)接收一个空对象而不是传递给它的对象.当第一个脚本是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没有提供逃避单引号的选项.我也不能使用脚本库(据我所知,如果我错了就纠正我),因为代码不在脚本包中,并且所有必需的文件都需要在同一个文件夹中(出于出口的原因).

解决方法:

我不知道如何避免runScript错误,但我可以建议一种替代方法:将脚本加载为脚本库.

使用脚本库

将脚本转换为库可以像将脚本保存到〜/ Library / Script Libraries一样简单.如果您的脚本文件名为script.scpt且有一个运行处理程序,并将其保存到Script Libraries文件夹,那么您可以从另一个脚本调用它,如下所示:

Library("script").run(["Hello, world!"])

脚本库记录在JXA release notes for OS X 10.10,WWDC 2014 session video introducing JXAAppleScript Language Guide中.

在脚本包中嵌入脚本库

根据脚本库的AppleScript语言指南文档,有一个用于查找脚本库文件夹的搜索策略.它搜索的第一个地方是:

If the script that references the library is a bundle, the script’s bundle Resources directory. This means that scripts may be packaged and distributed with the libraries they use.

要将此应用于问题中给出的示例,您需要将第一个脚本重新保存为脚本包,然后将第二个脚本嵌入到第一个脚本中.

例如,如果将第一个脚本重新保存为script.scptd,则可以将第二个脚本embedded.scpt保存到script.scptd / Resources / Script Libraries / embedded.scpt.然后,您应该能够使用库(’embedded’)来访问脚本库.

要将现有脚本重新保存为脚本包,您可以使用文件>在脚本编辑器中导出…菜单项,或者您可以在选择文件菜单时按住选项以显示文件>另存为…菜单项. “文件格式”弹出菜单允许您选择“脚本”包格式.

打开脚本包后,可以使用“显示包内容”菜单项或工具栏按钮显示包内容面板.然后,您可以使用齿轮菜单在Resources文件夹内创建Script Libraries文件夹,然后将脚本拖动到该文件夹​​中.

标签:javascript,applescript,jxa
来源: https://codeday.me/bug/20190711/1432131.html