【问题标题】:Android webview how to detect when reloadsAndroid webview如何检测何时重新加载
【发布时间】:2014-05-10 13:42:51
【问题描述】:

您好,感谢您的关注!

请在我的 android 应用程序中有一个 WebView。

我需要检测 WebView 何时重新加载 URL。

要明确:当用户按下网页上的按钮时,我的 WebView 中包含的网页会重新加载,但 ID 不会更改 URL,

因此shouldOverrideUrlLoading 不会被调用。

如何检测 URL 重新加载???


这是我的代码:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.preappove);
    wait = new ProgressDialog(this);
    wait.setTitle("Please Wait");
    wait.setMessage("Redirecting to PayPal for your approval");
    wait.show();
    wv = (WebView) findViewById(R.id.webView);
    wv.clearCache(true);
    wv.clearHistory();
    wv.getSettings().setJavaScriptEnabled(true);
    wv.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
    wv.getSettings().setLoadWithOverviewMode(true);
    wv.getSettings().setUseWideViewPort(true);
    perfs = getSharedPreferences("pefs",
            PreApprove.this.MODE_MULTI_PROCESS);
    sender = perfs.getString("sender", null);
    receiver = perfs.getString("receiver", null);
    paymentamount = perfs.getString("paymentamount", null);
    maxpaymentamount = perfs.getString("maxpaymentamount", null);
    paymentnumber = perfs.getString("paymentnumber", null);
    // wv.setWebViewClient(new Callback());
    wv.getSettings().setBuiltInZoomControls(true);
    GetPreappovalKey gpk = new GetPreappovalKey();
    try {
        gpk.execute().get();
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (ExecutionException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    wv.setWebViewClient(new WebViewClient() {

        public void onPageFinished(WebView view, String url) {
            wait.dismiss();
        }

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            if (url.contains("www.google.com")) {
                Welcome.fa.finish();
                Toast.makeText(PreApprove.this, "Setup Completed Successfully!", Toast.LENGTH_LONG).show();
                //PreApprove.this.finish();
                Payment.pay(PreApprove.this);
            }// GOOD APPROVED
            if (url.contains("www.yahoo.com")) {
                PreApprove.this.finish();
            }// BAD CANCELLED

            view.loadUrl(url);

            return true;

        }

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
        // NEVER GETS CALLED WHEN PAYPAL RELOADS :-(
        }
    });
    wv.loadUrl("https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_ap-preapproval&preapprovalkey="
            + preappovalkey);

}

【问题讨论】:

    标签: android webview reload


    【解决方案1】:

    你试过WebViewClient.shouldInterceptRequest(WebView view, String url)吗?

    您可能还想查看一下贝宝网页,看看单击按钮后会发生什么。例如是 AJAX 请求吗?

    ----编辑----

    还请注意,WebViewClient.shouldOverrideUrlLoading() 并不总是针对每个请求调用。据我所知,它不会至少在以下情况下:

    1. 页内导航。例如,两个 URL 仅具有不同的 URL 片段。
    2. POST 请求。
    3. 来自 iframe 的请求。

    它也记录在Android doc:它被称为...when a new url is about to be loaded in the current WebView

    关于onPageStarted/Finished(),只有在重新加载主html/文档时才会调用它。即它不会在 AJAX 请求的情况下被调用。

    【讨论】:

      【解决方案2】:

      您可以在与shouldOverrideUrlLoading 相同的客户端中使用它:

      Link

      @Override
      public void onPageFinished(WebView view, String url) {
      }
      

      如果您想检测页面何时完成加载。

      或者你可以使用:

      Link

      @Override
      public void onPageStarted(WebView view, String url, Bitmap favicon) {
      }
      

      检测页面何时开始加载。

      【讨论】:

      • 感谢 Daan,我已经尝试过,但是当重新加载 URL 时他们没有检测到,他们不会感到厌烦 :-(((
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-21
      • 2022-11-11
      • 1970-01-01
      相关资源
      最近更新 更多