Mac编程问题:如何检测WebView中重定向的URL?

时间:2010-12-17 20:40:50

标签: xcode macos redirect webview

这是一个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?

感谢。

2 个答案:

答案 0 :(得分:4)

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

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

[webView setFrameLoadDelegate:object];

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

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

这就是全部!

答案 1 :(得分:4)

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

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

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

- (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上设置正确的委托以获取调用的方法。