11

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

这是我的网络客户端:

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 并通知它。

4

3 回答 3

5

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

已经提出了许多解决方法。例如

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

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

于 2013-03-29T14:13:29.567 回答
4

我认为在 onLoadRessource(..) 和 onPageStarted() 中应该进一步

view.stopLoading();

在你的 else{..}

于 2016-07-03T09:04:50.730 回答
1

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

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

shouldOverrideUrlLoading 被调用,如果它进入一个新页面或者如果有一个重定向,但不是像点击 iframe 等。我想在我的应用程序中实现类似的行为,我意识到 onPageStarted 被调用,但不应该 OverrideUrlLoading。

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

于 2015-04-29T08:14:08.623 回答