Android webview如何检测何时重新加载

Posted

技术标签:

【中文标题】Android webview如何检测何时重新加载【英文标题】:Android webview how to detect when reloads 【发布时间】: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);


【问题讨论】:

【参考方案1】:

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

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

----编辑----

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

    页内导航。例如,两个 URL 仅具有不同的 URL 片段。 POST 请求。 来自 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 时他们没有检测到,他们不会感到厌烦 :-(((

以上是关于Android webview如何检测何时重新加载的主要内容,如果未能解决你的问题,请参考以下文章

如何检测 Cordova WebView 何时完全完成加载?

检测 UIWebView 何时加载引用文件失败

Android如何在屏幕关闭/打开时防止webview重新加载?

Android:如何检测滚动何时结束

android webview 检测联网

Android检测webview URL更改