2012-04-02 11 views
0

私のアプリのユーザーに提示される前に、ページのhtmlとjavascriptで何らかの処理をしたいと思っています。このページはすべてのリンクに対してwindow.openを使用するため、アプリケーションによって制御されていない新しいブラウザウィンドウが開かれ、アプリケーションを使用しているような錯覚に陥ります。これは私が今持っているものですが、私はほとんどの部分でうまくいくと思います。ページが読み込まれた後にJavascriptInterfaceでメソッドを実行

class LinkFixer 
{ 
    static HashMap<String,String>pages = new HashMap<String,String>();//static so multiple pages can access it 

    public void processPage(String html) 
    { 
     html = html.replace("window.open","LinkFixer.openInNewTab"); 
    } 

    public void openInNewTab(String url, String targetName) 
    { 
     if(!pages.containsKey(targetName))//targetName is unique for every link 
     { 
      pages.put(targetName,url); 
      //add new tab to my TabHost, which will contain a WebView with page from url loaded 
     } 

     //move user to tab 
    } 
} 
WebView browser = (WebView)findViewById(R.id.browser); 
browser.getSettings().setJavaScriptEnabled(true); 

browser.addJavascriptInterface(new LinkFixer(), "LinkFixer"); 
browser.loadUrl("http://serverIP:port/mobilecontrol.html"); 
//something to make the browser execute LinkFixer.processPage goes here 

私はそれを持っているだろう問題は、私はページの読み込みが完了したときにページがLinkFixer.processPageを実行するだろうかわからないということです。それ以外は、コードがうまくいくと思います。助言がありますか?

答えて

1

新しいWebChromeClientを作成し、newProgressが100以上になった後にonProgressChangedメソッドをオーバーライドしてリンクを修正しました。私は

にそれをしたい正確にどのように動作します

browser.setWebChromeClient(new WebChromeClient() 
    { 
     public void onProgressChanged(WebView webView, int newProgress) 
     { 
      super.onProgressChanged(webView,newProgress); 
      if(newProgress >= 100) 
      { 
       System.out.println("Done loading"); 
       browser.loadUrl("javascript:document.getElementsByTagName(\"html\")[0].innerHTML = window.LinkFixer.processPage((document.getElementsByTagName(\"html\")[0].innerHTML))"); 
      } 
     } 
    }); 

関連する問題