내 프로젝트 중 하나의 경우 웹 페이지에서 인터넷에서 가져온 페이지를 표시하려고하지만이를 수행하기 전에 변경합니다. 그리고 그 webview에서 클릭 한 모든 URL에 대해 동일한 작업을 수행하고 있습니다. 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;
}
이 있지만,이 코드는 시간의 절반을 작동합니다 이상한입니다. 이 코드를 디버깅 할 때 항상 동일한 단계를 거치지 만 이상한 이유로 인해 실제로 doubleclick하면 url이 열립니다. 나는 사용해야 할 때 그것을 사용할 때 모든 필요한 단계를 거치기 때문에 올바르게 작동하게하는 내부 작업의 일부를 "깨뜨린"느낌을 doubleclicking (또는 심지어 필요한 경우 스팸 클릭)합니다. 페이지를로드하지 마십시오 (페이지가 내 사용자 정의 방법 등을 사용하여 가져 오더라도).
누구나 여기에 실종 된 내용이 있습니까?
그 진술에 대한 출처가 있습니까? 제가 디버깅으로 볼 수있는 한 shouldOverrrideUrlLoading()은 웹 뷰에서 URL을 클릭 할 때마다 호출되기 때문입니다. –
여러 버그 보고서가있는 곳. 수정 사항이 제안 된 곳입니다. http://code.google.com/p/android/issues/detail?id=812 –