【问题标题】:Mac Programming Question: How do I detect the URL of a redirect in a WebView?Mac 编程问题:如何检测 WebView 中重定向的 URL?
【发布时间】:2011-05-27 08:26:57
【问题描述】:

这是一个 MacOS 编程问题,而不是 iOS (iPhone) 编程问题。

我有一个 WebView。我可以将网页加载到 WebView 并使用此委托协议检测初始加载:

- (void)webView:(WebView *)webView decidePolicyForNavigationAction:(NSDictionary *)actionInformation request:(NSURLRequest *)request frame:(WebFrame *)frame decisionListener:(id)listener { NSString *urlString = [[request URL] absoluteString];
NSLog(@"%@", urlString); }

但是我发送它的页面会立即重定向,我需要查看它重定向到的 URL。不幸的是,这个协议并没有捕捉到重定向。

有人知道如何在 WebView 中检测重定向的 URL 吗?

谢谢。

【问题讨论】:

  • 如果不是iPhone编程题,请勿标记为iPhone

标签: xcode macos redirect webview


【解决方案1】:

你是个幸运的人。一个小时前我遇到了同样的问题。

根据Apple文档中的WebView引用类,你必须设置一个符合webframeloaddelegate协议的委托。

[webView setFrameLoadDelegate:object];

然后在对象中,你必须设置这个方法:

- (void)webView:(WebView *)sender willPerformClientRedirectToURL:(NSURL *)URL delay:(NSTimeInterval)seconds fireDate:(NSDate *)date forFrame:(WebFrame *)frame 

就是这样!

【讨论】:

  • 这是一个客户端重定向。服务器重定向不会调用它
【解决方案2】:

webView:decidePolicyForNavigationAction: 方法是WebPolicyDelegate 协议的一部分。有两种方法可以做到这一点。如果您只想知道何时发生重定向,可以使用WebFrameLoadDelegate Protcol 中的webView:didReceiveServerRedirectForProvisionalLoadForFrame::

- (void)webView:(WebView *)webView didReceiveServerRedirectForProvisionalLoadForFrame:(WebFrame *)frame {
    NSLog(@"%@",[[[[frame provisionalDataSource] request] URL] absoluteString]);
}

如果您想修改重定向,请使用WebResourceLoadDelegate 协议中的webView:resource:willSendRequest:redirectResponse:fromDataSource::

- (NSURLRequest *)webView:(WebView *)sender resource:(id)identifier willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)redirectResponse fromDataSource:(WebDataSource *)dataSource {
    NSURLRequest *request = redirectResponse;
    //make any changes to and return new request
    return request;
}

无论您采用哪种方式,请确保您在 webView 上设置了正确的委托,以便调用方法。

【讨论】:

  • 但是这两种方法都不会在webView:decidePolicyForNavigationAction:request:frame:decisionListener: 之后被调用,从而无法根据重定向状态决定导航策略...?
  • @Jamie 也许我误解了这个问题。我的解释是重定向发生在政策决定之后,这并不重要。实际上,现在重新阅读听起来更像是客户端重定向,因为其他答案处理。
猜你喜欢
  • 1970-01-01
  • 2017-03-20
  • 2017-06-27
  • 2012-10-25
  • 2012-07-14
  • 1970-01-01
  • 1970-01-01
  • 2017-09-22
  • 2021-03-30
相关资源
最近更新 更多