2012-03-21 16 views
6

私はWebViewClientを使用しています。 onPageStarted()コールバックは常にshouldOverrideUrlLoading()コールバックとペアになっているはずですか? WebViewでexample.comをロードすると、両方のメソッドが呼び出されるはずですか?ドキュメントから:WebViewClient - onPageStarted()とshouldOverrideUrlLoading()?

onPageStarted()

は、ページの読み込みが開始されたホストアプリケーションに通知します。このメソッドは、各メインフレームのロードごとに1回呼び出されるため、iframeまたはフレームセットを持つページはメインフレームに対してonPageStartedを1回呼び出します。これは、埋め込みフレームのコンテンツが変更されたとき、つまりターゲットがiframeであるリンクをクリックしたときにonPageStartedが呼び出されないことを意味します。

shouldOverrideUrlLoading()

ホストアプリケーションに新しいURLが現在のWebViewにロードされようとしているときに制御を引き継ぐためにチャンスを与えます。 WebViewClientが提供されていない場合、WebViewはデフォルトで、Activity ManagerにURLの適切なハンドラを選択するよう求めます。 WebViewClientが提供されている場合、trueはホストアプリケーションがURLを処理することを意味し、falseは現在のWebViewがURLを処理することを意味します。

私は各メソッドにlogステートメントを入れていますが、必ずしもそれらが一緒にペアリングされているとは限りません。どのような場合にはそうではありませんか?

おかげ

http://developer.android.com/reference/android/webkit/WebViewClient.html

+0

'shouldOverrideUrlLoading()'にtrueを返すと、 'onPageStarted()'は呼び出されません。それを超えると、2つのリクエストが連続している場合に 'onPageStart'が呼び出されないことがあり、そのうちの1つが通過しない可能性があります。私は後者についてはそれほど自信がありません。 – Jakar

+0

私のアプリケーションに入っているログによれば、 'shouldOverrideUrlLoading'と' onPageStarted'はどんな順序でも呼び出すことができ、非常に混乱します。私はまだこれがどのような状況で起こっているかを知りませんでした。 – Stan

答えて

1

私はこの質問が古いですけど、とにかく答えます。 AFAIKでは、ページのすべてのURLに対してshouldOverrideUrlLoading()が呼び出され、onPageStart()はページの最上位URLに対してのみ呼び出されます。

+1

'shouldOverrideUrlLoading'と' shouldInterceptRequest'を混同しているようです。最初のページは1ページにつき1回だけ呼び出され、2番目のページはすべてのHTTPリクエスト(「url」と呼ばれている場合)用です。 – Stan

関連する問題