對於我的其中一個項目,我試圖顯示一個頁面,我從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加載頁面(即使使用我的自定義方法提取頁面等)。
任何人都知道我在這裏失蹤了什麼?
您是否有任何聲明來源?因爲就我所能看到的調試而言,每次在web視圖中點擊一個url時都會調用shouldOverrrideUrlLoading()。 –
那裏有幾個錯誤報告。這是修正提案的地方:http://code.google.com/p/android/issues/detail?id=812 –