2012-01-23 39 views
1

对于我的其中一个项目,我试图显示一个页面,我从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。我有这种感觉(即使是偷偷摸摸的时候也会点击垃圾邮件)“打破”内部工作的某些东西,这会导致它正常工作,因为当我使用它时,它会经历所有必要的步骤, t加载页面(即使使用我的自定义方法提取页面等)。

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

回答

1

问题是'uncomplete'链接没有调用shouldOverrrideUrlLoading()。这是出于安全原因而完成的。通常情况下,你可以通过强制链接是“完整的”解决这个问题:

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

的loadDataWithBaseURL增加了基本URL所有未完成的环节。

+0

您是否有任何声明来源?因为就我所能看到的调试而言,每次在web视图中点击一个url时都会调用shouldOverrrideUrlLoading()。 –

+0

那里有几个错误报告。这是修正提案的地方:http://code.google.com/p/android/issues/detail?id=812 –

相关问题