Applescript使用Javascript迭代UIElements

时间:2016-07-10 10:00:40

标签: javascript applescript jxa

有人可以帮我制作一个报告所有孩子及其属性的脚本吗?它类似于wholeContents()函数。这是我的递归函数。

function iterate(obj) {
    for (var property in obj) {
        if(obj[property] instanceof Array) {
            console.log("Array: " + property + "," +obj[property])
            iterate(obj[property])
        } else if(obj[property] instanceof Object){
            console.log("Object: " + property + ',' + obj[property])
            iterate(obj[property])
        } else {
            console.log("Unknown: " + property +"," + obj[property]);
        }
    }
}
iterate(app.windows())

我只获得第一级。每个项目下都有大量的UIElements和数组。我认为它与Applescript返回对象说明符有关,但不是实际对象?我不知道如何调用对象说明符的名称作为函数。我尝试了objproperty,obj.property(),eval(“obj。”+ property +“()”),并且它们都不起作用。我也试过迭代(app.windows())[0]
谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

我认为您要使用“系统事件”的Processes Suite中的命令。

  • 要获取UIElement的属性,您必须使用以下属性之一:
  

accessibilityDescription,class,description,enable,entireContents,   focus,help,maximumValue,minimumValue,name,orientation,   位置,角色,角色描述,选中,大小,子角色,标题,   值

  • 获取名称的示例:obj[i].name()

要从UIElement获取所有UIElements,您必须使用obj[i].uiElements()

以下是“ TextEdit ”流程窗口的示例。

function iterate(obj) {
    for (var i in obj) {
        if(obj[i] instanceof Array) {
            iterate(obj[i])
        } else if(obj[i] instanceof Object){
            console.log("Object: " + i + ': name = ' + obj[i].name() + ', value = ' + obj[i].value() + ', class = ' + obj[i].class() + ', description = ' + obj[i].description())
            iterate(obj[i].uiElements())
        }
    }
}
var sysEv = Application('System Events')
var app = sysEv.processes['TextEdit']
iterate(app.windows())