2012-01-23 75 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 –

相關問題