2016-03-07 11 views
11

Próbowałem już zrobiłem w WebView przy użyciu JavaScriptInterface. Ale to nie działa. Jak uzyskać zawartość HTML z XWalkView?Jak uzyskać zawartość html z XWalkView?

W ten sposób mogę uzyskać HTML z 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); 
     } 

    } 

} 

Próbowałem to samo dla XWalkView, ale nie udało im się. Jak uzyskać kod źródłowy HTML z XWalkView?

+0

mógłbyś podać więcej informacji o ty pytanie? Czy chcesz wywołać funkcję java w js? – Xiaofeng

Odpowiedz

2

Dodaj JavaScript Interfejs:

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); 
       } 
      }); 

realizować funkcję 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

Life Saver !! Dziękuję Ci. Chciałbym móc przyjąć twoją odpowiedź, ponieważ plakat najwyraźniej ją porzucił. – SunnySonic