2012-01-23 3 views
1

Для одного из моих проектов я пытаюсь отобразить страницу, которую я получаю из Интернета, в веб-просмотре, но изменяя ее, прежде чем я это сделаю. И я делаю то же самое для всех URL-адресов, которые вы выбрали из этого веб-представления.Изменение данных, отображаемых в 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

У вас есть источник для этого заявления? Поскольку, насколько я могу видеть, отлаживая, shouldOverrrideUrlLoading() вызывается каждый раз, когда URL-адрес кликается в webview. –

+0

Там, где несколько отчетов об ошибках. В этом случае исправление предлагается: http://code.google.com/p/android/issues/detail?id=812 –

Смежные вопросы