这是一个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?
感谢。
答案 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上设置正确的委托以获取调用的方法。