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

Objective-C中如何让WKWebView点击链接触发decidePolicyForNavigationAction方法

问题解决:WKWebView的decidePolicyForNavigationAction方法未触发

核心原因:未设置WKWebView的navigationDelegate

你已经在ViewController中声明遵循WKNavigationDelegate协议,也实现了对应的代理方法,但必须将WKWebView的navigationDelegate属性赋值为当前ViewController实例,否则系统无法将导航事件传递到代理方法。

具体修复步骤

1. 在代码中设置代理

在ViewController的viewDidLoad方法中添加以下代码:

- (void)viewDidLoad {
    [super viewDidLoad];
    // 关键:将webview的导航代理设置为当前控制器
    self.webview.navigationDelegate = self;
}

2. 验证IBOutlet关联是否正确

确保storyboard/xib中的WKWebView控件已经正确关联到ViewController的webview属性:

  • 检查xib/storyboard中,WKWebView的Outlet连接是否指向LESSViewController的webview属性
  • 在viewDidLoad中打印self.webview,确认其不为nil

额外检查项

  • 如果是通过代码创建WKWebView,确保初始化后立即设置navigationDelegate:
    WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init];
    self.webview = [[WKWebView alloc] initWithFrame:self.view.bounds configuration:config];
    self.webview.navigationDelegate = self; // 必须设置
    [self.view addSubview:self.webview];
    
  • 若页面内存在iframe或锚点跳转,可通过navigationAction.navigationType判断事件类型,确保你的逻辑覆盖所需场景:
    if (navigationAction.navigationType == WKNavigationTypeLinkActivated) {
        // 处理用户点击链接的逻辑
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 19:36:02