web-dev-qa-db-ja.com

UIWebViewがイベントの読み込みを完了しました

UIWebView(Iphone)がURLのロードを完了したときにイベントを開始することは可能ですか?.

UIWebViewの現在のURLを確認するにはどうすればよいですか?

39
Ploetzeneder

はい、可能です。 UIWebViewDelegateプロトコルを使用して、デリゲートに次のメソッドを実装します。

- (void)webViewDidFinishLoad:(UIWebView *)webView

URLが必要な場合は、プロパティrequestを使用して最後のリクエストを取得できます。

webView.request.URL
76
Pascal

見つかった解決策はどれも私にとってうまくいきませんでした。

次に、Google/StackOverflowで見つけた他のどのソリューションよりもはるかに優れたこの例を見つけました。

iwebview-load-completion-tracker

2
sabiland

「URLを取得する」部分に対するPascalの回答は問題ありません。

しかしながら!

UIWebViewDelegateのドキュメント、Appleから:「webViewDidFinishLoad:Webビューがフレームの読み込みを完了した後に送信されます。」

フレーム!=ページ。

webViewDidFinishLoadは、ページの「読み込み完了」時に呼び出されます。それまでに何度も呼び出すこともできます。 Amazon.comからページをロードすると、webViewDidFinishLoadへの12の呼び出しが生成される可能性があります。

ページのソースを制御している場合は、そのページの負荷テストを行うことができ、その場合は機能します。 「ページのロードが完了した後で」呼び出されることだけに関心がある場合は、webViewDidFinishLoadで十分です。

任意のページ、任意のJavaScript、永続的な広告バナーのロード、自動スクロールバナー、またはビデオゲームの実装では、ページの「ロードが完了」するという考え自体が間違っています。

1
Neal

非常に単純な方法:

ステップ1:ヘッダーファイルにデリゲートUIWebViewDelegateを設定します。

ステップ2:次のwebViewDidFinishLoadメソッドを追加して、webviewの現在のURLを取得します

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    NSLog(@"Current URL = %@",webView.request.URL);

    //-- Add further custom actions if needed 
}
1