2012-01-23 8 views
1

내 프로젝트 중 하나의 경우 웹 페이지에서 인터넷에서 가져온 페이지를 표시하려고하지만이를 수행하기 전에 변경합니다. 그리고 그 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 (또는 심지어 필요한 경우 스팸 클릭)합니다. 페이지를로드하지 마십시오 (페이지가 내 사용자 정의 방법 등을 사용하여 가져 오더라도).

누구나 여기에 실종 된 내용이 있습니까?

답변

1

'uncomplete'링크가 shouldOverrrideUrlLoading()을 호출하지 않는 것이 문제입니다. 이것은 보안상의 이유로 이루어집니다. 보통은 '완료'로 링크를 강제로이 문제를 해결할 수 있습니다

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

loadDataWithBaseURL이 완료되지 않은 모든 링크에 기본 URL을 추가합니다.

+0

그 진술에 대한 출처가 있습니까? 제가 디버깅으로 볼 수있는 한 shouldOverrrideUrlLoading()은 웹 뷰에서 URL을 클릭 할 때마다 호출되기 때문입니다. –

+0

여러 버그 보고서가있는 곳. 수정 사항이 제안 된 곳입니다. http://code.google.com/p/android/issues/detail?id=812 –

관련 문제