停止在webViewClient加载

在我的WebView中,我有多个链接头。 在离线模式下,我不能允许重新加载页面,并保持该页面,然后通知用户关于互联网连接。 如果点击其他链接,我可以在加载之前使用shouldOverrideUrlLoading来捕获链接。 但是,如果我点击相同的链接, shouldOverrideUrlLoading不会被解雇,而是首先调用onLoadResource方法。 在那个方法中,我尝试了webView.stopLoading(); 但它继续工作并触发onReceivedError方法,并在页面上显示错误报告。

这是我的WebClient:

 webView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if(MyApplication.getInstance().isOnline()) { return false; } Toast.makeText(getApplicationContext(), "Please check Internet connection and try again.", Toast.LENGTH_SHORT).show(); return true; } @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { Log.i("ON_PAGE_START", "RUNNING ============>" + url); if (MyApplication.getInstance().isOnline()) { super.onPageStarted(view, url, favicon); } else { webView.stopLoading(); } } @Override public void onLoadResource(WebView view, String url) { if (MyApplication.getInstance().isOnline()) { super.onLoadResource(view, url); } else { webView.stopLoading(); } } @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { view.stopLoading(); Toast.makeText(getApplicationContext(), "Please check Internet connection and try again.", Toast.LENGTH_SHORT).show(); super.onReceivedError(view, errorCode, description, failingUrl); } }); 

我想要的是能够确保url在离线状态下不被解雇,并通知相关人员。

Solutions Collecting From Web of "停止在webViewClient加载"

它是一个已知的问题,并有一个错误报告。 http://code.google.com/p/android/issues/detail?id=2887

已经提出了一些解决方法。 例如

  1. 覆盖onPageStarted
  2. 通过CommonsWare 添加JavascriptInterface
  3. 禁用WebView触摸事件

此外,注册BroadcastReceiver以监听networking状态更改,并在连接丢失时应用该解决方法。 networking监听器Android

我知道它的一个相当老的post,但感谢这个post,这帮助我解决了这个问题!

我有一个类似的问题,stopLoading解决了我的问题:)

shouldOverrideUrlLoading被调用,如果它进入一个新的页面,或者如果有一个redirect,但没有其他喜欢的前点击iframe等。我想在我的应用程序中实现类似的行为,我意识到onPageStarted被调用,但不应该onOverrideUrlLoading。

我没有重写onLoadResource,而是onPageStarted,因为onLoadResource在onPageStarted之后被调用。 OnPageStarted检查是否离线,在这种情况下不加载。 希望这可以帮助别人。

我认为在onLoadRessource(..)和onPageStarted()它应该是

 view.stopLoading(); 

在你的其他地方{..}