web-dev-qa-db-ja.com

UIWebViewでリダイレクトを検出する方法

アプリ内の埋め込みブラウザーとしてUIWebViewを使用しています。私が抱えている問題は、URLバーに表示されるはずのURLを追跡することです。

Google検索を実行すると、結果ページに次のようなリンクが生成されることがよくあります。

http://www.google.com/url?sa=t&source=web&cd=1&ved=0CC4QFjAA&url=http%3A%2F%2Fen.wikipedia.org%2Fwiki%2FDog&rct=j&q=dogs&ei = 27XeTc6RFIWEvAO858DHBQ&usg = AFQjCNGkEDcWzea4pSlurHhcuQfqFcp_pw

ユーザーがこのリンクをクリックすると、UIWebViewは最初にこのリンクを報告し、次にリダイレクトされたリンクをshouldStartLoadWithRequest:navigationType:

ページ上の画像やその他の要素のために読み込まれているいくつかの補足サイトとは対照的に、これがリダイレクトであることをどのように確認できますか?現状では、私のURLバーは、上記の例ではWikipediaのURLに更新するのではなく、Googleからの長いリンクを表示しています。

21
zorro2b

あなたが本当にできる最善のことは、webView:shouldStartLoadWithRequest:navigationType:デリゲートメソッド。リダイレクトはUIWebViewNavigationTypeOtherに該当すると思います。

19
thelaws

少し遅れましたが、次のようにwebViewDidFinishLoadおよびwebViewDidStartLoadデリゲートメソッドを使用してリダイレクトを検出します。

- (void)webViewDidStartLoad:(UIWebView *)webView{

    myRequestedUrl= [webView.request mainDocumentURL];
    NSLog(@"Requested url: %@", myRequestedUrl);    
}

- (void)webViewDidFinishLoad:(UIWebView *)webView{  

    myLoadedUrl = [webView.request mainDocumentURL];
    NSLog(@"Loaded url: %@", myLoadedUrl);

   //psudocode
   if(myRequestedUrl is not the same as myLoadedUrl){
      doSomething
   }
}
7
PowerAktar

私はこの同じ問題に取り組んでいます。もともとはここのアドバイスに従い、main/documenturlを使用して、履歴リストに手動でURLを入力し、前後に移動しました。ただし、didstartloadまたはdidfinishloadからURLを取得したかどうかに関係なく、これは非常に正確なURLを提供しませんでした。私の痛みを感じたい場合は、グーグル検索をナビゲートしてみてください。そうすれば、私が話していることがわかります。maindocumenturlは、その環境ではまったく役に立ちません。対照的に、webviewdidfinishloadで使用される絶対urlプロパティは、はるかに優れており、実際にユーザーが使用可能な履歴を作成できます。それは私の2セントです。

1
user2104778