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

如何获取新标签页打开的子WKWebView的当前URL?

解决子WKWebView无法获取URL的问题

你遇到的情况是因为在createWebViewWithConfiguration方法里,子WebView还未开始真正加载内容,所以navigationAction.request.URL可能为空(比如页面是通过JS打开空白窗口再跳转的场景),刚创建的popupWebView的URL属性自然也没有有效值。

正确的做法是通过WKNavigationDelegate的导航回调方法来获取子WebView加载完成后的URL,具体步骤如下:

  1. 利用webView:didFinishNavigation:代理方法,该方法会在WebView完成页面加载后触发,此时子WebView的URL属性已经有正确值。
  2. 在回调里判断当前WebView是子WebView(popupWebView),然后更新导航栏标题。

将以下代码添加到你的WkWebViewModule类中:

- (void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigation *)navigation {
    // 判断当前完成导航的是子WebView
    if (webView == self.popupWebView) {
        NSString *currentURL = webView.URL.absoluteString;
        NSLog(@"子WebView当前URL: %@", currentURL);
        self.controller.navigationItem.title = currentURL;
    }
}

如果需要在页面开始加载时就获取URL,也可以使用webView:didCommitNavigation:方法,该方法会在WebView开始接收页面内容时触发,同样能拿到有效URL:

- (void)webView:(WKWebView *)webView didCommitNavigation:(null_unspecified WKNavigation *)navigation {
    if (webView == self.popupWebView) {
        NSString *currentURL = webView.URL.absoluteString;
        NSLog(@"子WebView开始加载的URL: %@", currentURL);
        self.controller.navigationItem.title = currentURL;
    }
}

补充说明

  • 确保你的WkWebViewModule已经正确设置了popupWebView的navigationDelegate(你代码里已经完成这步设置,无需额外操作)。
  • 如果子WebView存在多次跳转的情况,didFinishNavigation会在每次跳转完成后触发,能实时更新当前显示的URL。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 10:39:16