You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

kAXVisibleCharacterRangeAttribute未适配顶部栏及滚动问题求助

使用kAXVisibleCharacterRangeAttribute获取文本可见范围的问题与临时方案

问题现象

在通过kAXVisibleCharacterRangeAttribute获取应用内文本的可见范围,用于绘制NSPanel时,遇到以下问题:

  • 返回的可见范围未覆盖应用顶部栏区域
  • 即使滚动文本使部分内容不可见,该属性仍返回从索引0起始的文本范围,此问题在Microsoft Word中同样存在

原实现代码

原用于获取可见范围的Swift代码如下:

func getVisibleCharacterRange()->CFRange?{
        var visibleCharacterRange: AnyObject?
        
        let errorType: AXError = AXUIElementCopyAttributeValue(
            self,
            kAXVisibleCharacterRangeAttribute as CFString,
            &visibleCharacterRange
        )
        
        if(errorType == AXError.success){
            let v = visibleCharacterRange as! AXValue
            precondition(AXValueGetType(v) == .cfRange)
            var range = CFRange()
            let done = AXValueGetValue(v, .cfRange, &range)
            precondition(done)
            return range
        }
        
        return nil
    }

临时解决方案

由于kAXVisibleCharacterRangeAttribute存在上述兼容性与准确性问题,可采用以下临时方案:

  1. 先获取文本区域的初始CGRect
  2. 监听并跟踪窗口的大小调整、移动事件
  3. 根据窗口的实时状态,结合文本区域的位置与滚动偏移,计算出实际可见的文本范围

内容的提问来源于stack exchange,提问作者CloudWave

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 07:14:56