[英]Using the `runScript` function to run a JXA script does not allow parameters
我使用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;
}
除了參數問題之外, runScript
函數實際上似乎工作得很好。 實際上並沒有拋出錯誤,只是由腳本編輯器顯示,並且在調用runScript
之后繼續執行,就像沒有發生任何事情一樣。 盡管參數不起作用,返回的值也可以完美地工作。
要在Alfred 2中運行一些代碼(由搜索,鍵盤命令等觸發),必須將其鍵入應用程序的框中,而不是文件中。 輸入代碼的框非常小,不提供語法高亮,這使編輯代碼變得困難和煩人。 對於較小的文件,它是可以的,但對於較大的文件,使用短腳本來運行腳本文件更容易。 我嘗試過Bash,這是最簡單的選擇,但Alfred 2沒有提供逃避單引號的選項。 我也不能使用腳本庫(據我所知,如果我錯了就糾正我),因為代碼不在腳本包中,並且所有必需的文件都需要在同一個文件夾中(出於出口的原因)。
我不知道如何避免runScript
錯誤,但我可以建議一種替代方法:將腳本加載為腳本庫。
將腳本轉換為庫可以像將腳本保存到~/Library/Script Libraries
一樣簡單。 如果您的腳本文件名為script.scpt
且有一個運行處理程序,並將其保存到Script Libraries
文件夾,那么您可以從另一個腳本調用它,如下所示:
Library("script").run(["Hello, world!"])
腳本庫記錄在OSX 10.10的JXA發行說明, 介紹JXA的WWDC 2014會話視頻和AppleScript語言指南中 。
根據腳本庫的AppleScript語言指南文檔,有一個用於查找Script Libraries
文件夾的搜索策略。 它搜索的第一個地方是:
如果引用該庫的腳本是一個bundle,則該腳本的bundle資源目錄。 這意味着腳本可以與他們使用的庫打包和分發。
要將此應用於問題中給出的示例,您需要將第一個腳本重新保存為腳本包,然后將第二個腳本嵌入到第一個腳本中。
例如,如果將第一個腳本重新保存為script.scptd
,則可以將第二個腳本embedded.scpt
保存到script.scptd/Resources/Script Libraries/embedded.scpt
。 然后,您應該能夠使用Library('embedded')
來訪問腳本庫。
要將現有腳本重新保存為腳本包,可以使用“腳本編輯器”中的“ File > Export...
菜單項,也可以在選擇“ File
菜單時按住選項以顯示“ File > Save As...
菜單項。 “ File Format
彈出菜單允許您選擇“ Script bundle
格式。
打開腳本包后,可以使用“ Show Bundle Contents
菜單項或工具欄按鈕Show Bundle Contents
包內容面板。 然后,您可以使用齒輪菜單在Resources
文件夾內創建Script Libraries
文件夾,然后將腳本拖動到該文件夾中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.