2010-08-26 52 views
11

我有一个android应用程序,用WebView在活动中加载网页。我正在使用手动检索页面,并使用WebView的loadDataWithBaseURL将其显示在屏幕上。一切都很好。Android:WebView的方法goBack()显示一个空白页面

现在,我试图覆盖返回按钮按模拟在WebView历史堆栈中回去。我可以覆盖Back按钮,我可以看到WebView中有一个历史堆栈,我可以看到历史URL是正确的,但是当我调用WebView的方法时,它会显示一个空白页面。

以前任何人都遇到过这个问题,或者给我一些建议,从中继续?

编辑:如果我使用的WebView 使用loadURL方法,如打算使用一个代理后退按钮的工作原理。但为什么....如果我需要手动处理这个,我该如何开始搞乱历史页面?

回答

1

你应该检查canGoBack()方法调用GoBack的前返回true()

+1

我已经在检查它。从我在上面的问题描述中,我也能够得到历史网址(之前的页面)。当我执行goBack时,它显示一个空白页面。 – Bundeeteddee 2010-08-27 00:57:03

6

我得到了同样的问题也。我发现如果在调用loadDataWithBaseURL时设置了historyUrl参数,问题就消失了。

+0

参数名称最近更改为'failUrl' – ohhorob 2011-12-16 23:54:00

+2

我们应该在historyUrl中设置什么值UIr – 2011-12-29 05:57:24

+0

我试过将historyUrl设置为html/url/wathever,但没有成功......有没有人成功过? – miniBill 2012-03-18 21:58:22

0

我发现的唯一的解决方案是创建一个堆栈<字符串>和手动管理历史

0

我有同样的问题,我尝试了所有的答案,但没有任何帮助(测试环境都在Nexus 5上运行棉花糖)。 loadDataWithBaseURL解决方案与我无关,因为我使用的是loadUrl

现在,这不是一个解决方案,但我很幸运地注意到。这件事很奇怪,只有当目标网址以.html结尾时才有效。我的意图是帮助任何人面对这个问题,因为我知道这是多么令人讨厌。所以,请容忍我,不投票这个答案,如果你认为这是无稽之谈。

我注意到的是,如果url结尾在.html,那么当按下后退按钮时,白色屏幕出现

另一方面,如果您从您的网址中删除.html - 显然只有当网站支持该功能时(例如,重定向和所有服务器在服务器端正确处理并且它不会触发404页面未找到错误),该URL将充当您的基地这次,并且当您按下后退按钮时,此时白屏不应该出现

例如:必须更换 http://example.com/page.html到: http://example.com/page

同样,我没有测试彻底张贴本 - 今天这个工作对我来说,很高兴,我发现这一点,我希望它可以帮助你也是。

0

我处理这个问题的方法是使用loadDataWithBaseURL加载根页面后保留一个本地堆栈指针,指向加载页面的数量。返回时,如果我的指针命中1,我在根级别并使用loadDataWithBaseURL重新加载根页面。我使用这段代码在带有片段的活动中,所以这些片段实现了接口IBackButtonListener,它帮助我捕获主活动中的后退按钮并将事件传播到当前片段。如果该片段返回true,则意味着它处理了该事件。

IBackbuttonListener.java

public interface IBackButtonListener { 
    public boolean onBackButtonPressed(); 
} 

片段实现IBackButtonListener并且具有从HTML数据加载的网页视图。

private int historyStackPointer = 0; 

    ... 

     @Override 
      public boolean onBackButtonPressed() { 
       boolean rtn = false; 

       if (webView.canGoBack()) { 
        if(historyStackPointer > 1) { 
         webView.goBack(); 
         historyStackPointer--; 
         rtn = true; 
        }else{ 
         if(historyStackPointer == 1) { 
          // Reload the html data 
          webView.loadDataWithBaseURL("file:///android_asset/", html_data, "text/html", "UTF-8", null); 
          historyStackPointer = 0; 
          rtn = true; 
         }else{ 
          webView.loadUrl("about:blank"); 
          rtn = false; 
         } 
        } 
       } else { 
        rtn = false; 
       } 
       return rtn; 
      } 

html_data是一个带页面html的字符串。