Ignore multiple onPageFinished() callbacks & onReceivedError due to stopLoading()

I believe this happens only when using custom schemes.
This commit is contained in:
Andrew Grieve 2014-02-04 00:12:11 -05:00
parent dfae37421d
commit a5c8472a37
2 changed files with 18 additions and 1 deletions

View File

@ -541,6 +541,11 @@ public class CordovaWebView extends WebView {
this.loadUrlIntoView(url);
}
@Override
public void stopLoading() {
viewClient.isCurrentlyLoading = false;
super.stopLoading();
}
public void onScrollChanged(int l, int t, int oldl, int oldt)
{

View File

@ -62,6 +62,7 @@ public class CordovaWebViewClient extends WebViewClient {
CordovaInterface cordova;
CordovaWebView appView;
private boolean doClearHistory = false;
private boolean isCurrentlyLoading;
/** The authorization tokens. */
private Hashtable<String, AuthenticationToken> authenticationTokens = new Hashtable<String, AuthenticationToken>();
@ -266,7 +267,9 @@ public class CordovaWebViewClient extends WebViewClient {
*/
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
isCurrentlyLoading = true;
LOG.d(TAG, "onPageStarted(" + url + ")");
// Flush stale messages.
this.appView.jsMessageQueue.reset();
@ -290,6 +293,11 @@ public class CordovaWebViewClient extends WebViewClient {
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
// Ignore excessive calls.
if (!isCurrentlyLoading) {
return;
}
isCurrentlyLoading = false;
LOG.d(TAG, "onPageFinished(" + url + ")");
/**
@ -344,6 +352,10 @@ public class CordovaWebViewClient extends WebViewClient {
*/
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
// Ignore error due to stopLoading().
if (!isCurrentlyLoading) {
return;
}
LOG.d(TAG, "CordovaWebViewClient.onReceivedError: Error code=%s Description=%s URL=%s", errorCode, description, failingUrl);
// Clear timeout flag