在macOS Mojave 10.14中,对于许多应用程序,在鼠标下的UI元素上调用AXUIElementCopyAttributeNames()函数时,结果中会出现一个新的AXReplaceRangeWithText属性。但是,当我在UI元素上调用AXUIElementCopyAttributeValue()函数并传递AXReplaceRangeWithText属性时,它要么导致目标应用程序崩溃,要么如果它是文本字段或文本区域,则在目标应用程序中输入垃圾文本。
有人可以解释AXReplaceRangeWithText属性是什么,如何使用,它做什么以及由谁负责吗?它没有被Apple记录,也没有出现在辅助功能API头文件中。我向Apple提交了错误报告,但没有采取任何措施。
答案 0 :(得分:0)
您似乎可以通过调用参数化 API 来调用 AXReplaceRangeWithText
,基本上如下:
AXUIElementCopyParameterizedAttributeValue(
element,
"AXReplaceRangeWithText",
@{
@"AXReplacementRange": NSMakeRange(0, 1),
@"AXReplacementText": @"test"
}
);
似乎根据目标元素是否支持该属性返回True
或False
。但是,在我对 macOS 10.15.7 Catalina 的测试中,它实际上只修改了 Safari 中的文本(例如在 <textarea>
元素中)。即使返回 True
,它也不会修改 TextEdit 等其他应用程序中的文本。这似乎是一个 AppKit 错误。