重启后无法接收kAXSelectedTextChangedNotification,启动辅助检查器后恢复
Apple辅助功能API通知接收异常问题
注册AXObserver监听kAXSelectedTextChangedNotification等通知后,许多已开启应用辅助权限的新用户无法触发该通知,但kAXWindowMovedNotification等其他通知可正常接收。
复现步骤
- 移除应用辅助权限
- 重启电脑
- 重新开启权限
此时仍无法接收kAXSelectedTextChangedNotification,但其他通知正常。
关键现象
启动Apple的*Accessibility Inspector(辅助检查器)*后,该通知即可正常接收。由此推测两种可能:
- 我们启动观察者时缺少必要配置,而Accessibility Inspector的正确设置使系统正常工作;
- Accessibility Inspector使用了我们无法访问的Apple私有API。
已尝试的解决方案
- 为SystemWide元素、Application元素及AXApplication子元素等不同AXUIElement订阅该通知,均无效,直到启动Accessibility Inspector(操作符合Apple文档中应添加到根Application AXUIElement的要求)。
- 重构代码改为仅调用一次
AXUIElementCreateApplication,排除多次调用导致通知发送到错误元素的可能,但问题仍存在。 - 尝试遍历子AXUIElement找到带有
kAXSelectedTextAttribute的元素并订阅,未解决问题,且此方向不符合启动检查器后恢复的现象。 - 仅为特定文本框AXUIElement添加监听器可接收该文本框的通知,但无法覆盖所有文本框,不实用。
需求与额外发现
遍历整个辅助功能层级为所有带kAXSelectedTextAttribute的子视图加监听器并非长期方案,速度慢且无法应对元素动态变化。希望实现文档所述的高层Application AXUIElement接收该通知的效果,且启动检查器后已验证此可行,需复刻其操作逻辑。
此外,实现遍历策略时发现辅助功能层级元素极少(多数应用仅2-3层),疑似未完全初始化,但添加5秒延迟无改善。
寻求解决方案。
内容的提问来源于stack exchange,提问作者Tim
相关产品推荐
相关产品推荐

