什么是AXReplaceRangeWithText macOS可访问性属性?

时间:2018-10-08 09:01:49

标签: macos user-interface accessibility-api

在macOS Mojave 10.14中,对于许多应用程序,在鼠标下的UI元素上调用AXUIElementCopyAttributeNames()函数时,结果中会出现一个新的AXReplaceRangeWithText属性。但是,当我在UI元素上调用AXUIElementCopyAttributeValue()函数并传递AXReplaceRangeWithText属性时,它要么导致目标应用程序崩溃,要么如果它是文本字段或文本区域,则在目标应用程序中输入垃圾文本。

有人可以解释AXReplaceRangeWithText属性是什么,如何使用,它做什么以及由谁负责吗?它没有被Apple记录,也没有出现在辅助功能API头文件中。我向Apple提交了错误报告,但没有采取任何措施。

1 个答案:

答案 0 :(得分:0)

您似乎可以通过调用参数化 API 来调用 AXReplaceRangeWithText,基本上如下:

AXUIElementCopyParameterizedAttributeValue(
    element, 
    "AXReplaceRangeWithText",
    @{
        @"AXReplacementRange": NSMakeRange(0, 1),
        @"AXReplacementText": @"test"
    }
);

似乎根据目标元素是否支持该属性返回TrueFalse。但是,在我对 macOS 10.15.7 Catalina 的测试中,它实际上只修改了 Safari 中的文本(例如在 <textarea> 元素中)。即使返回 True,它也不会修改 TextEdit 等其他应用程序中的文本。这似乎是一个 AppKit 错误。