如何获取在新选项卡中打开的当前wkwebview的URL?

How to get the URL of current wkwebview that was opened in a new tab?

提问人:Piyush Khanna 提问时间:8/22/2022 最后编辑:Piyush Khanna 更新时间:8/25/2022 访问量:265

问:

我有一个 WkWebview,它在新选项卡中打开一个子 WkWebview。我正在尝试在导航栏顶部向用户显示当前 Web 视图的 URL。我能够使用父 webview 的 webView.URL 属性来实现此目的,但同一属性在用于子 webview 时返回一个空白字符串。我还尝试使用 navigationAction.request.URL 作为子 webview 的替代方法,但这也返回一个空字符串。子 webview 完美打开,除了 URL 之外,我没有看到任何其他问题。如何获取子 Web 视图的当前 URL?

用于创建在新选项卡中打开的子 Web 视图的代码:

    - (nullable WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures {
    
    self.popupWebView = [[WKWebView alloc] initWithFrame:self.webView.frame configuration:configuration];
    self.popupWebView.UIDelegate = self;
    self.popupWebView.navigationDelegate = self;
    [self.webView addSubview:self.popupWebView];
    NSLog( @"Pop up webview navigationAction URL: '%@'", navigationAction.request.URL.absoluteString );
    self.controller.navigationItem.title = navigationAction.request.URL.absoluteString;
    return self.popupWebView;
}

编辑:在上面的代码中添加“self”所指的接口:

NS_ASSUME_NONNULL_BEGIN

@interface WkWebViewModule : NSObject <RCTBridgeModule, WKUIDelegate, WKNavigationDelegate>

@property (nonatomic) UIViewController *controller;
@property (nonatomic) UINavigationController *navigationController;
@property (nonatomic) WKWebView *webView;
@property (nonatomic) UINavigationItem *navItem;
@property (nonatomic) UINavigationBar *navbar;
@property (nonatomic) WKWebView *popupWebView;
@property (nonatomic) WKPreferences *wkPreferences;

@end

NS_ASSUME_NONNULL_END
iOS Objective-C WebView UIView wkwebview

评论

0赞 Ptit Xav 8/23/2022
你不展示什么是自我?还要注意,将委托设置为似乎已经是委托的内容。
0赞 Piyush Khanna 8/24/2022
嗨,Ptit,我在这里添加了“self”所指的界面。

答:

1赞 ferdil 8/25/2022 #1

不是 100% 确定,但您可能需要在使用委托 self.popupWebView.UIDelegate 加载页面后获取 URL,因为在您尝试获取 URL 时,WkWebView 已创建,但没有内容?

评论

0赞 Piyush Khanna 9/3/2022
谢谢@ferdil,事实确实如此。我在webview didFinishNavigation函数中添加了以下行,现在工作正常。- (void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigation *)navigation { self.controller.navigationItem.title = webView.URL.absoluteString; }