2010-12-17 18 views
2

これはiOS(iPhone)プログラミングではなく、MacOSのプログラミングに関する質問です。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

答えて

4

あなたは幸運な男です。私は同じ問題を1時間前に来た。

AppleのドキュメントのWebViewリファレンスクラスによると、webframeloaddelegateプロトコルに準拠するデリゲートを設定する必要があります。

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

すべてです:

[webView setFrameLoadDelegate:object]; 

は、オブジェクトには、このメソッドを設定する必要があります!

+1

とタグ付けしないでください。これはクライアントのリダイレクト用です。サーバーリダイレクトのために呼び出されることはありません – ughoavgfhw

4

webView:decidePolicyForNavigationAction:メソッドはWebPolicyDelegateプロトコルの一部です。これを行うには2つの方法があります。リダイレクトが起こっているときにのみ、お知りになりたい場合は、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で適切なデリゲートを設定する必要があります。

+0

しかし、これらのメソッドの両方がAFTER 'webView:decidePolicyForNavigationAction:request:frame:decisionListener:'リダイレクトステータスに基づいてナビゲーションポリシーを決定することを不可能にする...? –

+0

@Jamieおそらく私はその質問を誤解していました。私の解釈は、ポリシー決定後にリダイレクトが発生したことであり、それは重要ではありません。実際には、他のアンサーが処理するようにクライアントリダイレクトのように聞こえるようになりました。 – ughoavgfhw

関連する問題