gpt4 book ai didi

javascript - 使用 JXA 访问对象的属性

转载 作者:行者123 更新时间:2023-11-30 09:27:57 24 4
gpt4 key购买 nike

我正在尝试使用 JXA 访问名为 Papers3 的应用程序中对象的属性。我是 JXA 的新手,事实证明这很有挑战性,尤其是因为缺少文档。

这是我要查看的对象的字典截图

enter image description here

我正在尝试获取应用中当前显示的窗口的 ID。

我的尝试是:

var Papers = Application('Papers');
Papers.includeStandardAdditions = true
Papers.libraryWindow.displayedPublications()

运行它会抛出一个错误,输出是:

第 4 行错误:TypeError:Papers.libraryWindow.displayedPublications 不是函数。 (在“Papers.libraryWindow.displayedPublications()”中,“Papers.libraryWindow.displayedPublications”未定义)

错误 -2700:脚本错误。

另外,如果我只调用 Papers.libraryWindow

结果是:

  [function anonymous] {
"name":"",
"prototype":{"constructor":[function anonymous]}
}

我不知道该怎么办。

最佳答案

好吧,JXA 是被破坏的混淆的垂死垃圾,AS 也好不了多少,但这里要理解的关键是 Apple 事件 IPC 不是 OOP,它是 RPC + 简单一流的关系查询。尽管有语法糖,但它最接近的亲戚实际上是 SQL 数据库编程,而不是浏览器 DOM 操作,所以一旦你了解它,它就会 [希望] 开始变得更有意义。

“AppleScriptable”应用程序将其数据呈现​​为高度抽象的关系图——“Apple 事件对象模型”——其中每个节点都通过一对一和/或一对多关系与其他节点相关。在面向对象的意义上,没有“类”或“对象”之类的东西;这只是为了文档目的而附加的行话。因此,应用程序的字典称为“属性”的是一个包含原始值(数字、字符串、列表等;例如 Finder filename 属性的简单属性) 或一对一关系(例如 iTunes 的 applicationcurrent track 属性),它所谓的“元素”是一对多关系(在您的例子中,是 Papers 的 application 对象的 libraryWindows 元素)。

例如,Papers.libraryWindows.displayedPublications.get()应该返回 Papers 中每个库窗口的显示出版物列表(尽管这是否真的适用于实践取决于应用程序 AEOM 的实现情况,更不用说 JXA 自身的实现问题);或者您可以使用各种引用形式(按索引、按名称等;尽管 JXA 中有几个被破坏/不受支持)将您的查询范围缩小到,比方说,只是第一个库窗口,例如Papers.libraryWindows[0].displayedPublications.get()

您可能会通过浏览 NodeAutomation 文档获得一些见解,其中包括 rough overview of AEOM以及如何组合查询,然后通过命令(远程过程调用)发送给它以解决和处理它认为合适的查询。 JXA 语法不那么漂亮,各种操作在 JXA 的 AS barf 中完美运行,但它会给您一个大概的概念。

也就是说,我强烈建议坚持使用 AppleScript。这门语言一团糟,但至少它有一些文档和用户社区来帮助你找到解决它的方法(即使他们也不深入理解它)。

关于javascript - 使用 JXA 访问对象的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48255943/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com