我想弄清楚JXA(JavaScript for Automation)是如何工作的,所以尝试将如下的简单AppleScript翻译成JXA.
tell application "Finder"
open location "smb://XXXXXXXX"
end tell
Run Code Online (Sandbox Code Playgroud)
我试过的是这里:
finder = Application("Finder")
finder.open({location:"smb://xxxxxx"})
Run Code Online (Sandbox Code Playgroud)
但是我失败了...,我是Apple的新手,并不是真正理解库中的描述.这是图书馆描述的方式open
open?(v) : Open the specified object(s)
open specifier : list of objects to open
[using specifier] : the application file to open the object with
[with properties record] : the initial values for the properties, to be included with the open command sent to the application that opens the direct object
Run Code Online (Sandbox Code Playgroud)
请告知我应该如何修改代码.^^谢谢
我一直在尝试为自动化脚本创建一个 JavaScript,以通过 Yosemite 10.10.2 上的 Messages 应用程序发送 iMessage(最终目标是编写一个解决方案以允许后台任务到 iMessage 故障状态等)。
脚本在脚本编辑器中执行没有错误,但是没有消息发送,Messages.app 中没有任何显示或发生。虽然我的服务和下面的好友被混淆了,但我的具有真实值的脚本检索了正确的服务和好友(通过对服务和好友名称执行 messages.displayAlert() 进行验证)。我从脚本中得到的唯一输出是 service.send() 的“未定义”,我认为这是正确的,因为该方法具有 void 返回类型)。下面的这个脚本是我一直没有成功尝试开始工作的脚本:
messages = Application('Messages');
service = messages.services["E:foo@bar.com"];
buddy = service.buddies["+61nnnnnnnnn"]
service.send({
send: "Hello World",
to: buddy
});
Run Code Online (Sandbox Code Playgroud)
等效的 AppleScript 脚本(如下)成功运行:
tell application "Messages"
send "Hello World" to buddy "+61nnnnnnnnn" of service "E:foo@bar.com"
end tell
Run Code Online (Sandbox Code Playgroud) 我正在使用 JXA 使用 Numbers 应用程序实现流程自动化。我需要的是选择一系列单元格来应用宽度,但 JXA 不允许我获取它们。
根据苹果文档,我只需要使用 make 或将创建的对象推送到数组内,但任何一个都可以。这是我的代码和 Automator 错误:
选项1:
var Numbers = Application('Numbers');
Numbers.Range({name: 'A2:A20'}).make();
// -> Error: Can't make or move that element into that container
Run Code Online (Sandbox Code Playgroud)
选项2:
var Numbers = Application('Numbers');
var myRange = Numbers.Range({name: 'A2:A20'});
Numbers.documents[0].sheets[0].tables[0].ranges.push(myRange);
// -> Error: Can't create object.
Run Code Online (Sandbox Code Playgroud)
选项 3:
var Numbers = Application('Numbers');
var myRange = Numbers.Range({name: 'A2:A20'});
Numbers.documents[0].sheets[0].tables[0].selectionRange = myRange;
// -> Automator close with an unexpected error
Run Code Online (Sandbox Code Playgroud)
根据 AppleScript 文档(语法与 Javascript 非常不同),我可以分配代表范围的文本:
set selection range …Run Code Online (Sandbox Code Playgroud) 我尝试使用 awindow.setTimeout但在运行时出现错误:
第 182 行错误:TypeError:window.setTimeout 不是函数。(在
Run Code Online (Sandbox Code Playgroud)window.setTimeout(function(){ }, 3000);,
window.setTimeout未定义) (-2700)
有人能帮我吗 ?
我正在尝试做一些基本的事情。我只想打开一个新窗口,然后在该窗口中使用 OSX Yosemite 的新 javascript 桥打开 2 个选项卡。我找不到显示如何执行此操作的文档:
ObjC.import("Cocoa");
chrome = Application("Google Chrome");
chrome.includeStandardAdditions = true
chrome.open("test1tab.com");
chrome.open("test2tab.com");
Run Code Online (Sandbox Code Playgroud) javascript macos applescript osx-yosemite javascript-automation
如何使用10.10 Yosemite中引入的JavaScript for Automation功能将消息发送到Mac OS X 通知中心?
javascript macos notifications automation javascript-automation
请告诉我如何在应用程序窗口中单击点坐标?我尝试使用 JXA 技术在 OSX 10.10 上对我的应用程序进行 UI 自动化。在文档中我发现可以使用点击事件。我是 JXA 的初学者,找不到如何拨打电话。我在脚本编辑器中尝试过的代码片段:
var app = Application('my_application_path')
app.window.click.at('{100,100}')
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助
我一直在尝试解决这个问题一段时间,想知道您是否可以提供帮助。
使用 AppleScript,系统事件应用程序中有两个隐藏功能可用,它们允许您按下一个键(在其他操作完成时按住它),然后再次将键重新打开。
例如,请参阅此处的答案Applescript 以运行检测显示,其中在执行单击时使用“向上键”和“向下键”。
但是为了这个例子,让我们使用一些非常简单的东西,一个保存快捷方式。
AppleScript 看起来像这样:
tell application "System Events"
key down command
keystroke "s"
key up command
end tell
Run Code Online (Sandbox Code Playgroud)
我在 JXA 中最接近的如下,但无论我传递给 keyDown 什么,它都会发送字母“a”:
events = Application("System Events")
events.keyDown("command")
events.keystroke("s")
events.keyUp("command")
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
谢谢!
福蒂斯
在AppleScript中,您可以:
do shell script "echo 'I am (G)root'" with administrator privileges
Run Code Online (Sandbox Code Playgroud)
抱歉.无论如何,shell脚本可以在JXA中运行,如下所示:
var app = Application.currentApplication();
app.includeStandardAdditions = true;
app.doShellScript("echo I am not root :(");
Run Code Online (Sandbox Code Playgroud)
但是,with administrator privileges在JXA中似乎没有相应的内容.有没有我错过的,或者我该怎么做呢?并且不要告诉我使用sudo.它不会起作用.
我正在尝试转换这个现有的 AppleScript 脚本:
tell application "System Events"
make login item with properties {path:"/Applications/Application.app", hidden:false"}
end tell
return
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止所拥有的:
#!/usr/bin/env osascript -l JavaScript
'use strict';
ObjC.import('stdlib')
function run(argv) {
var systemEvents = Application('System Events')
systemEvents.make({
new: 'LoginItem',
at: systemEvents.loginItems,
withProperties: {
name: "Application",
path: "/Applications/Application.app",
hidden: false,
kind: "Programm"
}
})
$.exit(0)
}
Run Code Online (Sandbox Code Playgroud)
但是,我被困在以下行中,因为我实际上不知道要传递给该new:属性的内容,所以我认为其他属性是正确的。
new: 'LoginItem',
Run Code Online (Sandbox Code Playgroud)
我希望有人能指出我正确的方向。
当Safari未运行时,我可以通过以下Automation JavaScript代码打开Safari.
safari = Application('Safari')
Run Code Online (Sandbox Code Playgroud)
但是当Safari运行并且没有窗口时,上面的代码不会打开Safari的新窗口.
我试着添加以下代码.
window = safari.Window()
safari.windows.push(window)
Run Code Online (Sandbox Code Playgroud)
但没有影响.
当Safari正在运行但没有窗口时,如何通过JavaScript自动化打开Safari的新窗口?
目前,我使用以下代码
safari = Application('Safari')
safari.open(Path('~/dummy'))
Run Code Online (Sandbox Code Playgroud)
我不喜欢它.
我\xe2\x80\x99m 尝试在 JXA 中编写一批 OmniFocus 任务脚本,但遇到了一些严重的速度问题。我不认为这个问题是 OmniFocus 或 JXA 特有的;相反,我认为这是对获取对象如何工作的更普遍的误解 - 我希望它像单个 SQL 查询一样工作,加载内存中的所有对象,但它似乎按需执行每个操作。
\n\n这里\xe2\x80\x99s是一个简单的例子 - 让\xe2\x80\x99s获取所有未完成任务的名称(这些任务存储在后端的SQLite DB中):
\n\nvar tasks = Application('OmniFocus').defaultDocument.flattenedTasks.whose({completed: false})\nvar totalTasks = tasks.length\nfor (var i = 0; i < totalTasks; i++) {\n tasks[i].name()\n}\nRun Code Online (Sandbox Code Playgroud)\n\n[Finished in 46.68s]
实际上获取 900 个任务的列表大约需要 7 秒——已经很慢了——但是循环和读取基本属性又需要 40 秒,大概是因为每个任务都会访问数据库。(此外,它tasks的行为不像数组 - 它似乎在每次访问时都会重新计算。)
有什么方法可以快速做到这一点 - 一次将一批对象及其所有属性读入内存?
\n我想使用JXA自动更新Numbers电子表格.例如,将一系列单元格从一个电子表格复制到另一个具有不同结构的单元格.
在这一点上,我只是测试一个简单的程序来设置或读取单元格的值,我无法让它工作.
当我尝试设置一个值时,我得到"错误-1700:无法转换类型".当我尝试读取值时,我会返回[object ObjectSpecifier]而不是文本或数字值.
这是代码的示例:
Numbers = Application('Numbers')
Numbers.activate()
delay(1)
doc = Numbers.open(Path('/Users/username/Desktop/Test.numbers'))
currentSheet = doc.Sheets[0]
currentTable = currentSheet.Tables[0]
console.log(currentTable['name'])
console.log(currentTable.cell[1][1])
currentTable.cell[1][1].set(77)
Run Code Online (Sandbox Code Playgroud)
当我运行它时,我获取并输出[object ObjectSpecifier]两个console.logs,然后输出错误-1700:尝试设置单元格时无法转换类型.
我尝试过访问或设置属性的其他几种变体但无法使其工作.
提前致谢,
戴夫
macos ×6
applescript ×5
javascript ×5
automation ×2
automator ×1
equivalent ×1
iwork ×1
osascript ×1
osx-yosemite ×1
shell ×1