diff --git a/framework/src/org/apache/cordova/CordovaWebView.java b/framework/src/org/apache/cordova/CordovaWebView.java index b30ea78c..b0e3d433 100755 --- a/framework/src/org/apache/cordova/CordovaWebView.java +++ b/framework/src/org/apache/cordova/CordovaWebView.java @@ -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) { diff --git a/framework/src/org/apache/cordova/CordovaWebViewClient.java b/framework/src/org/apache/cordova/CordovaWebViewClient.java index e465ffa8..0b7b8003 100755 --- a/framework/src/org/apache/cordova/CordovaWebViewClient.java +++ b/framework/src/org/apache/cordova/CordovaWebViewClient.java @@ -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 authenticationTokens = new Hashtable(); @@ -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