JXA を使用してAlfred 2のワークフローのスクリプトを作成していますが、最近、別のスクリプト内からスクリプトを実行しようとしました。スクリプト間でテキストを渡す必要があるため、パラメーターを使用することにしましたが、文字列、数値、配列など、オブジェクトではないものを渡そうとすると、エラー " Error on line 4: Error: An error occurred.
" が発生します。オブジェクトを渡すと、2 番目のスクリプト (最初のスクリプトによって実行されるスクリプト) は、渡されたオブジェクトではなく、空のオブジェクトを受け取ります。最初のスクリプトが AppleScript の場合も同じことが起こりますが、2 番目のスクリプトが AppleScript の場合は、すべて完全に機能します。osascript
コマンドラインから引数を渡すことも機能します。API が壊れているのでしょうか、それとも間違っているのでしょうか?
最初のスクリプト:
var app = Application.currentApplication();
app.includeStandardAdditions = true;
app.runScript(new Path("/path/to/second/script.scpt"), { withParameters: "Hello World!" });
2 番目のスクリプト:
function run(args) {
return args;
}
編集:
2 番目のスクリプトを次のように編集すると、ダイアログは表示されますが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 には一重引用符をエスケープするオプションがありません。また、スクリプト ライブラリを使用することもできません (私の知る限り、間違っている場合は訂正してください)。これは、コードがスクリプト バンドルに含まれておらず、必要なすべてのファイルが同じフォルダー内にある必要があるためです (エクスポートの理由により)。