更改WebView中显示的数据

时间:2012-01-23 21:15:46

标签: android android-webview

对于我的一个项目,我试图在webview中显示我从互联网上获取的页面,但在我这样做之前改变它。对于从该webview点击的所有网址,我也是这样做的。

为了做到这一点,我首先创建了一个扩展WebView的类,并添加了一个方法loadAlteredUrl(String url)

    public void loadAlteredUrl(String url) {
    String page = getURLContent(url);
    String filtered;
            // Code for altering the webpage


    super.loadData(filtered, "text/html", "UTF-8");
    //super.loadUrl("data:text/html;UTF-8," + filtered);
}


private String getURLContent(String url)
{
    try{
    HttpClient httpClient = new DefaultHttpClient();
    HttpContext localContext = new BasicHttpContext();
    HttpGet httpGet = new HttpGet(url);
    HttpResponse response = httpClient.execute(httpGet, localContext);
    String result = "";

    BufferedReader reader = new BufferedReader(
        new InputStreamReader(
          response.getEntity().getContent()
        )
      );

    String line = null;
    while ((line = reader.readLine()) != null){
      result += line + "\n";
    }
    return result;
    } catch (IOException ex) {
        return "IOEXCEPTION";
    }

此代码已经过测试且效果很好。但现在我只能改变我的第一页加载,这不是我想要的。所以我扩展了WebViewClient类并重载了shouldOverloadUrl函数:

public boolean shouldOverrideUrlLoading(WebView view, String url) {
    EnhancedWebview myview = (EnhancedWebview) view;
    if(!url.contains("http://")){
        if(url.substring(0, 1).equals("/"))
            url = url.substring(1);
        myview.loadAlteredUrl(MainWindow.baseUrl + url);
        return true;
    }
    return false;
}
但是,这很奇怪,这段代码只能工作一半的时间。当我调试这个代码时,它总是经历相同的步骤,但是出于一些奇怪的原因,它只会打开url's,如果我实际上双击它或更多。我感觉双击(甚至垃圾邮件点击时)“打破”内部工作的某些东西,使其正常工作,因为当我使用它时应该使用它,它会经历所有必要的步骤,但不会加载页面(即使使用我的自定义方法等提取页面)。

任何人都知道我在这里失踪了什么?

1 个答案:

答案 0 :(得分:1)

问题是'uncomplete'链接没有调用shouldOverrrideUrlLoading()。这是出于安全原因。通常,您可以通过强制链接“完成”来解决此问题:

// browser.loadData(page, "text/html", "UTF-8");
browser.loadDataWithBaseURL("base_url", page, "text/html", "UTF-8", null);

loadDataWithBaseURL将基本网址添加到所有未完成的链接。