2016-03-07 27 views
11

Ho provato a farlo in WebView utilizzando JavaScriptInterface. Ma non sta funzionando. Come ottenere contenuti HTML da XWalkView?Come ottenere il contenuto html da XWalkView?

In questo modo ho potuto ottenere HTML da WebView:

public class MainActivity extends AppCompatActivity { 

    WebView myWebView; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     myWebView = (WebView) findViewById(R.id.webView); 
     WebSettings webSettings = myWebView.getSettings(); 

     webSettings.setJavaScriptEnabled(true); 

     myWebView.loadUrl("http://joerichard.net/api/test/generate.htm"); 
     myWebView.getSettings().setJavaScriptEnabled(true); 
     myWebView.addJavascriptInterface(new MyJavaScriptInterface(this), "HtmlViewer"); 

     myWebView.setWebViewClient(new WebViewClient() { 
      @Override 
      public void onPageFinished(WebView view, String url) { 
       if(url.endsWith("generate.htm")){ 
        myWebView.loadUrl("javascript:window.HtmlViewer.showHTML" + 
          "('<html>'+document.getElementsByTagName('html')[0].innerHTML+'</html>');"); 
       } 
      } 
     }); 

    } 

    class MyJavaScriptInterface { 

     private Context ctx; 

     MyJavaScriptInterface(Context ctx) { 
      this.ctx = ctx; 
     } 

     public void showHTML(String html) { 
      Document doc = Jsoup.parse(html); 
     } 

    } 

} 

ho provato lo stesso per XWalkView ma non sono succeded. Come ottenere il codice sorgente HTML da XWalkView?

+0

Potrebbe fornire ulteriori informazioni su si mette in discussione? Vuoi chiamare la funzione java in js? – Xiaofeng

risposta

2

Aggiungere JavaScript Interfaccia:

webview.addJavascriptInterface(new test(this),"bla"); 

Set client

webview.setResourceClient(new XWalkResourceClient(webview) { 

       @Override 
       public void onProgressChanged(XWalkView view, int progressInPercent) { 
        super.onProgressChanged(view, progressInPercent); 
        pbLoading.setProgress(progressInPercent); 
       } 

       @Override 
       public void onLoadFinished(XWalkView view, String url) { 
        super.onLoadFinished(view, url); 
        webview.load("javascript:window.bla.showHTML" + 
          "('<html>'+document.getElementsByTagName('html')[0].innerHTML+'</html>');" 
          ,null); 
       } 
      }); 

implementare la funzione html

class test{ 
     private Context ctx; 

     test(Context ctx) { 
      this.ctx = ctx; 
     } 
     @JavascriptInterface 
     public void showHTML(String html) { 
      new AlertDialog.Builder(ctx).setTitle("HTML").setMessage(html) 
        .setPositiveButton(android.R.string.ok, null).setCancelable(false).create().show(); 
     } 

    } 
+0

Risparmio di vita !! Grazie. Vorrei poter accettare la tua risposta dal momento che il poster l'ha abbandonata a quanto pare. – SunnySonic