4

私が電話をかけるとき、電話は1回しか受けず、電話は受けないWebView#loadUrlはずだと思っています。ただし、(常に WebView#loadUrl を呼び出して true を返すことによって実装します) を取得し、次に同じ URL で 2 つの呼び出しを取得します。WebViewClient#onPageFinishedWebViewClient#shouldOverrideUrlLoadingWebViewClient#shouldOverrideUrlLoadingWebViewClient#onPageFinished

読み込んでいるページは、多くの ajax リクエストを使用しています。ajax リクエストは ? を呼び出しWebViewClientますか? 私のページにはメタリフレッシュがありません。

これはかなりイライラします。私は何か間違ったことをしていますか?

4

2 に答える 2

12

これは、トピックについて開始した Google グループのディスカッションからのクロスポストです。

私はさらに調査を行い、何が起こっているのかをすべて理解していると思います。

これが私のものWebViewClientです:

public class MyWebViewClient extends WebViewClient {
  @Override
  public void onPageStarted(WebView view, String url, Bitmap favicon) {
    System.out.println("onPageStarted: " + url);
  }

  @Override
  public boolean shouldOverrideUrlLoading(WebView webView, String url) {
    System.out.println("shouldOverrideUrlLoading: " + url);
    webView.loadUrl(url);
    return true;
  }

  @Override
  public void onPageFinished(WebView webView, String url) {
    System.out.println("onPageFinished: " + url);
  }
}

サーバーから次の URL リダイレクトがあります。

http://example.com/resource -> http://example.com/user-name/resource
http://example.com/logout.jsp -> http://example.com/login/logout
http://example.com/login/logout -> http://example.com/login

これらの URL は、私が管理していないサーバーの一部であるため、その動作に対処する必要があります。

これがロードからの出力ですhttp://example.com/resource

onPageStarted: http://example.com/resource
onPageStarted: http://example.com/user-name/resource
shouldOverrideUrlLoading: http://example.com/user-name/resource
onPageFinished: hhttp://example.com/user-name/resource

この時点で、私WebViewのコンテンツは空白です。onPageFinishedコンテンツを取得するには、1 秒後まで待たなければなりません。

onPageStarted: http://example.coms/user-name/resource
onPageFinished: http://example.com/user-name/resource

これがロードからの出力ですhttp://example.com/logout.jsp

onPageStarted: http://example.com/logout.jsp
onPageStarted: http://example.com/login/logout
shouldOverrideUrlLoading: http://example.com/login/logout
onPageFinished: http://example.com/login/logout
onPageStarted: http://example.com/login/logout
onPageStarted: http://example.com/login
shouldOverrideUrlLoading: http://example.com/login
onPageFinished: http://example.com/login

繰り返しますが、この時点で、私WebViewのページは空白です。onPageFinishedからコンテンツを取得するには、3 日まで待たなければなりませんWebView

onPageStarted: http://example.com/login
onPageFinished: http://example.com/login

ドキュメントに基づいて、私はこの動作を期待していません。onPageStartedとの数が不均衡であることに注意してくださいonPageFinishedonPageFinishedリダイレクトされた URL で呼び出される方法が特に嫌いWebViewですが、コンテンツが含まれていません。この動作はおそらく変更できないことは理解していますが、この予期しない動作は少なくとも文書化する必要があります。

于 2011-03-05T19:40:56.087 に答える
4
@Override
public boolean shouldOverrideUrlLoading(WebView webView, String url) {
    System.out.println("shouldOverrideUrlLoading: " + url);
    return true;
}

webView.loadUrl(url)を明示的に呼び出す必要はありません。true を返すようにオーバーライドすると、既存の webview が新しいページの読み込みを処理するように自動的に取得されます。それを不必要に呼び出すことにより、元のサイクル (onPageStarted -> onPageFinished) の途中で、その webView で Web ページのロードのまったく新しいサイクルが開始されるため、コールバックの余分なサイクルが合計でトリガーされます。

于 2016-04-28T07:10:38.057 に答える