Android HTML-код из веб-просмотра - PullRequest
2 голосов
/ 04 ноября 2011

привет, я использую этот пример http://lexandera.com/2009/01/extracting-html-from-a-webview/, чтобы получить HTML из веб-просмотра.Но мне нужно использовать его в моем суперклассе, и я не знаю, как это сделать.Я просто вижу HTML на AlertDialog, но я не могу его использовать.Как я могу вернуть его в свой основной класс как String?

final Context myApp = this;  

/* An instance of this class will be registered as a JavaScript interface */  
class MyJavaScriptInterface  
{  
    @SuppressWarnings("unused")  
    public void showHTML(String html)  
    {  
        new AlertDialog.Builder(myApp)  
            .setTitle("HTML")  
            .setMessage(html)  
            .setPositiveButton(android.R.string.ok, null)  
        .setCancelable(false)  
        .create()  
        .show();  
    }  
}  

final WebView browser = (WebView)findViewById(R.id.browser);  
/* JavaScript must be enabled if you want it to work, obviously */  
browser.getSettings().setJavaScriptEnabled(true);  

/* Register a new JavaScript interface called HTMLOUT */  
browser.addJavascriptInterface(new MyJavaScriptInterface(), "HTMLOUT");  

/* WebViewClient must be set BEFORE calling loadUrl! */  
browser.setWebViewClient(new WebViewClient() {  
    @Override  
    public void onPageFinished(WebView view, String url)  
    {  
        /* This call inject JavaScript into the page which just finished loading. */  
        browser.loadUrl("javascript:window.HTMLOUT.showHTML('<head>'+document.getElementsByTagName('html')[0].innerHTML+'</head>');");  
    }  
});  

/* load a web page */  
browser.loadUrl("http://lexandera.com/files/jsexamples/gethtml.html");  

Ответы [ 2 ]

2 голосов
/ 04 ноября 2011

Выполните следующие действия:

Настройка WebView

Сначала добавьте JavaScriptInterface в webView следующим образом.Здесь позже «Android» будет использоваться для вызова функций в JavaScriptInterface.

  webView = (WebView) findViewById(R.id.webView);
  WebSettings webSettings = webView.getSettings();
  webSettings.setJavaScriptEnabled(true);
  webView.addJavascriptInterface(new JavaScriptInterface(this), "MyAndroid");

Класс JavaScriptInterface:

 public class JavaScriptInterface {
     Context mContext;
     JavaScriptInterface(Context c) {
         mContext = c;
     }
}

HTML-файл:

  <html>
    <head>
    <script type="text/javascript">
    function getValue()
      {
        var x=document.getElementById("content").innerHTML;
        //  alert(x);
        MyAndroid.receiveValueFromJs(x);
      }
    </script>
    </head>
    <body>
    <div id="content">
    This is html content <hr/> 
    Other contents;
    <input type="button" onclick="getValue()" value="Get Content" />
    </div>
    </body>
    </html>

Вызов функции сценария Java

  //this calls javascript function
  webView.loadUrl("javascript:getValue()");

Добавление функции обратного вызова в JavaScriptInterface для MyAndroid.receiveValueFromJs (val):

public void receiveValueFromJs(String str) {
  Toast.makeText(mContext, "Received Value from JS: " + str,Toast.LENGTH_SHORT).show();
}

Здесь вы вернули HTML в переменной str.

Вы можете посмотреть мой блог: http://ganeshtiwaridotcomdotnp.blogspot.com/2011/10/calling-javascript-function-from.html для получения подробной информации.

Я нашел другое решение: Возможно липолучить код HTML из WebView

0 голосов
/ 04 ноября 2011

Разве вы не можете просто создать глобальную переменную, например

String globalHtml;

, а затем назначить ее методом showHTML?

globalHtml = html;

Вы можете удалить AlertDialogкод, если вам это не нужно.

...