2010-12-17 36 views
2

這是一個MacOS編程問題,而不是iOS(iPhone)編程。Mac編程問題:如何檢測WebView中重定向的URL?

我有一個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?

謝謝。

+1

如果不是iPhone編程問題,請不要將其標記爲iPhone – ughoavgfhw 2010-12-17 21:34:26

回答

4

你是個幸運的人。我在一小時前遇到了相同的問題。

根據Apple文檔中的WebView引用類,您必須設置一個符合webframeloaddelegate協議的委託。

[webView setFrameLoadDelegate:object]; 

然後在對象,你必須設置這個方法:

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

這一切!

+1

這是用於客戶端重定向。它不會被稱爲服務器重定向 – ughoavgfhw 2010-12-17 21:39:39

4

webView:decidePolicyForNavigationAction:方法是WebPolicyDelegate協議的一部分。有兩種方法可以做到這一點。如果你只是想知道當一個重定向正在發生的事情,你可以使用webView:didReceiveServerRedirectForProvisionalLoadForFrame: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上設置適當的委託以獲取調用的方法。

+0

但是,不要將這兩個方法調用AFTER'webView:decidePolicyForNavigationAction:request:frame:decisionListener:'使得根據重定向狀態決定導航策略是不可能的......? – 2016-12-07 09:38:41

+0

@Jamie也許我誤解了這個問題。我的解釋是政策決定之後發生的重定向,使之變得不重要。實際上,現在重新閱讀聽起來更像是客戶端重定向,因爲其他答案可以處理。 – ughoavgfhw 2016-12-09 01:10:03