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

WKWebView首次加载时页面按钮无障碍焦点丢失如何解决

WKWebView页面加载完成后自动获取无障碍焦点解决方案

核心修改逻辑

  • 控制器需要遵守WKNavigationDelegate协议,监听页面加载完成回调
  • 页面加载完成后发送无障碍布局变更通知,主动触发VoiceOver将焦点切换到WKWebView内容区域

完整修改后代码

import WebKit
class ViewController: UIViewController, WKUIDelegate, WKNavigationDelegate { // 新增遵守WKNavigationDelegate协议
    
    var myWebView: WKWebView! // 改为全局属性避免局部变量被释放
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        myWebView = WKWebView(frame: CGRect(x:0, y:0, width: UIScreen.main.bounds.width, height:UIScreen.main.bounds.height))
        myWebView.uiDelegate = self
        myWebView.navigationDelegate = self // 绑定导航代理
        self.view.addSubview(myWebView)
        
        let myURL = URL(string: "https://www.apple.com")
        let myURLRequest:URLRequest = URLRequest(url: myURL!)
        myWebView.load(myURLRequest)
    }
    
    // 页面加载完成回调
    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
        // 短延迟等待网页内容完全渲染、无障碍节点生成完成
        DispatchQueue.main.asyncAfter(deadline: .now() + 0.2) {
            // 发送无障碍布局变更通知,指定焦点落到webView内容区域
            UIAccessibility.post(notification: .layoutChanged, argument: webView)
        }
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}

可选优化方案

如果需要精准定位到网页内的特定按钮/元素获取焦点,可以在发送无障碍通知前,调用JS触发目标元素的聚焦逻辑:

// 替换#targetButton为实际网页元素的选择器
webView.evaluateJavaScript("document.querySelector('#targetButton').focus()", completionHandler: nil)

延迟时长可根据实际网页加载速度调整,大部分场景0.1-0.3秒即可满足需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 02:57:00