JXA:通过窗口ID操控窗口时出现获取对象失败的问题
解决JXA中通过窗口ID设置Preview窗口位置的错误
我来帮你搞定这个问题!你遇到的Error -1728: Can't get object错误,原因其实很简单:你用windows.whose({id: 15596})拿到的不是单个窗口对象,而是一个窗口集合(哪怕只有一个匹配的窗口,它依然是集合类型),集合本身并没有bounds属性,所以直接赋值会失败。
正确的解决方法
你只需要从筛选出的窗口集合中取出第一个元素(因为窗口ID是唯一的,只会有一个匹配项),再给这个单个窗口设置bounds就可以了。下面是修正后的代码:
// 获取Preview应用对象 const previewApp = Application("Preview"); // 通过ID筛选窗口,并取出第一个匹配的窗口 const targetWindow = previewApp.windows.whose({ id: 15596 })[0]; // 检查窗口是否存在,避免额外报错 if (targetWindow) { targetWindow.bounds = {x: 1440, y:25, width:1440, height: 2535}; }
更简洁的写法
如果你想让代码更紧凑,也可以直接把索引写在后面:
Application("Preview").windows.whose({id: 15596})[0].bounds = {x: 1440, y:25, width:1440, height: 2535};
为什么原来的索引写法有效?
之前用windows[0]能成功,是因为windows[0]直接返回了单个窗口对象,而不是集合,所以可以直接设置bounds属性。而whose方法的返回值始终是集合类型,必须通过索引定位到具体的窗口实例才行。
内容的提问来源于stack exchange,提问作者Xehelios
相关产品推荐
相关产品推荐

