2014-03-31 48 views
2

嗨,感謝您的關注!Android webview如何檢測何時重新加載

請問我在我的android應用程序中有一個WebView。

我需要檢測WebView何時重新加載URL。

需要明確的是:當用戶按下網頁上的按鈕,但ID不會更改URL包含在我的WebView網頁重新加載,

因此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

您可以在同一個客戶端用這個作爲shouldOverrideUrlLoading

Link

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

如果要檢測什麼時候頁面完成加載。

或者你可以使用:

Link

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

要檢測當頁面開始加載。

+0

感謝Daan,我試過了,但是他們沒有檢測到URL重新加載時,它們沒有被加載: - (((( –

+0

當你重新加載時它們會被調用,讓我看看你的其他代碼..) –

+0

添加代碼,請參閱我的編輯,謝謝 –

1

你試過WebViewClient.shouldInterceptRequest(WebView view, String url)

你也可能想看一下貝寶網頁,看看點擊按鈕後會發生什麼。例如這是一個AJAX請求?

---- ----編輯

也請注意,WebViewClient.shouldOverrideUrlLoading()並不總是要求每個請求。據我所知,它不會至少在以下情況:

  1. Intrapage導航。例如,兩個只包含不同網址片段的網址。
  2. POST請求。
  3. 來自iframe的請求。

此外,它記錄在Android doc:它被稱爲...when a new url is about to be loaded in the current WebView

關於onPageStarted/Finished(),只有在主html /文檔重新加載時纔會調用它。即在AJAX請求的情況下它不會被調用。

+0

感謝王偉但id沒有被調用: - ((( –

相關問題