对于我的其中一个项目,我试图显示一个页面,我从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 –