2012-01-23 9 views
1

私のプロジェクトの1つとして、インターネットからフェッチしたページをWebビューで表示しようとしていますが、変更する前に変更しています。そして、私はそのwebviewからクリックされたすべての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を開くだけです。私はそれが使用されるべきであるときにそれが必要なすべてのステップを通過するので、それが正しく動作する原因となる内側の作業の何かを "壊す"ページをロードする(カスタムメソッドなどを使用してページを取得しても)。

ここに何が欠けているのですか?

答えて

1

問題は、「未完成」リンクがshouldOverrrideUrlLoading()を呼び出さないということです。これはセキュリティ上の理由から行われます。通常は「完全」であるとのリンクを強制することでこの問題を解決することができます

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

loadDataWithBaseURLは完了していないすべてのリンクにベースURLを追加します。

+0

その声明の出所はありますか?限り、私はデバッグで見ることができるので、shouldOverrrideUrlLoading()は、WebビューでURLがクリックされるたびに呼び出されるためです。 –

+0

いくつかのバグレポートがあります。これは修正が提案されている場所です:http://code.google.com/p/android/issues/detail?id=812 –

関連する問題