2015-11-10 50 views
1

我已經嘗試了很長時間,現在可以找到一種方法從Web視圖中獲取HTML內容,並在Android應用程序中加載。我發現了幾個指南,指出我需要使用JavaScript界面​​,並且在某種程度上我已經完成了這項工作。現在的問題是,我無法得到最終的步驟,我實際上得到了一個可以處理的HTML字符串。我需要一個字符串,我可以在Web代碼中檢索到它後,在java代碼中使用html。這是我到目前爲止的代碼:在Android中將JavaScript注入到Web視圖並將HTML獲取爲字符串

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_login); 

    //login button 
     Button loginButton = (Button) findViewById(R.id.loginButton); 
     final WebView webview = (WebView)(findViewById(R.id.webview)); 

     loginButton.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // Call private method 

       webview.setWebViewClient(new WebViewClient() { 
        @Override 
        public void onPageFinished(WebView view, String url) { 
     /* This call inject JavaScript into the page which just finished loading. */ 
         webview.loadUrl("javascript:window.HTMLOUT.processHTML('<head>'+document.getElementsByTagName('body')[0].innerHTML+'</head>');"); 
         webview.setVisibility(View.INVISIBLE); 

        } 
       }); 

       webview.setVisibility(View.VISIBLE); 

       MyJavaScriptInterface JSInterface = new MyJavaScriptInterface(); 

       webview.getSettings().setJavaScriptEnabled(true); 
       webview.postUrl(url, SAMLreq.getBytes()); 

       webview.addJavascriptInterface(JSInterface, "HTMLOUT"); 
       //The html from the webview should be stored here 
       String htmlFromWebView = JSInterface.getTheHTMLToGo(); 


    class MyJavaScriptInterface { 

     private String theHTMLToGo = null; 

     public String getTheHTMLToGo() { 
      return theHTMLToGo; 
     } 

     public void setTheHTMLToGo(String theHTMLToGo) { 
      this.theHTMLToGo = theHTMLToGo; 
     } 

     @SuppressWarnings("unused") 
     @JavascriptInterface 
     public void processHTML(String html) { 
      theHTMLToGo = html 



     } 
    } 
} 

我可以看到,當我調試,在被稱爲「processHTML」 JavaScript方法的「HTML」字符串實際上包含正確的價值,但我仍然無法弄清楚如何從那裏拿出來。

+0

你是否看到'processHTML(...)'方法中的html數據,對不對?加載後立即調用'getTheHTMLToGo()'函數。你必須等一會才能得到結果,或者你可以在'processHTML(..)'方法中做你想做的事情。 – Ozgur

回答

0

解決方案一直在我面前。正如我在這個問題上發表的評論一樣:我基本上做的是正確的事情。我的問題是,我過早地調用方法getTheHTMLToGo()。我將一些代碼移入processHTML(String html),並確保在繼續之前完成流程。我通過在processHTML(String html)方法中調用我需要做的下一件事來做到這一點。

相關問題