Android的webView中获得Html代码


如果知道了一个网页的URL,在Android中用Java代码获得这个网页的Html内容其实很容易了,直接用HttpClient进行Http请求就行了,虽然简单,这里还是贴一下代码,一个很简单的例子:

import ......;

public class ThirdActivity extends Activity {

 private Handler mHandler = new Handler(){
     public void handleMessage(Message msg) {
                                                                             switch (msg.what) {
                                                                                                             case 1:
                                                                                                                         doGetConnect();
                                                                                                                          break;
                                                                                                            }
                                                                           }
    };
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  
  super.onCreate(savedInstanceState);
  Button button = new Button(this);
  button.setText("click to get html");
  
  button.setOnClickListener(new OnClickListener() {
   @Override
   public void onClick(View arg0) {
    Message message = new Message();
    message.what = 1;
    mHandler.sendMessage(message);  //启动线程
   }
  }  
  );
  setContentView(button);
 }
 private String doGetConnect(){
              String result = "";
              InputStream is = null;
              HttpGet httpRequest=new HttpGet("http://192.168.1.154:7087/index.html");
              try {
                       HttpResponse httpResponse=new DefaultHttpClient().execute(httpRequest);
                      if(httpResponse.getStatusLine().getStatusCode()==200){ //正确
    
                                                               is = httpResponse.getEntity().getContent();
                                                              byte[] data = new byte[1024];
                                                              int n = -1;
                                                              ByteArrayBuffer buf = new ByteArrayBuffer(10*1024);
                                                              while ((n = is.read(data)) != -1)
                                                                     buf.append(data, 0, n);  
                                                             result= new String(buf.toByteArray(), HTTP.UTF_8);
                                                             Log.v("result==", result);
                                                             is.close();
                                                           return result;
   }
   else {Log.v("tip==", "error response code");}
  } catch (Exception e) {
   Log.e("error==", ""+e.getMessage());
  }
  return null;
 }
}
但是如果想在用webView加载网页时,就能获得网页的Html代码就没那么容易了,SDK并没有提供相关的方法调用。这里用到在webView中进行Java代码和JavaScript代码互掉的方法,用JavaScript获得网页的Html代码很容易吧,然后把提取的html代码传递给Java代码,显示出来就可以了。

首先来看看webView中调用JavaScript以及反过来JavaScript调用Java方法的一般方式,这里还是做了一个小例子,还包括相互传参数的方式。Android代码如下:

public class FourthActivity extends Activity {

 WebView mWebView;
 private Handler mHandler = new Handler();


 @Override
 protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     mWebView = new WebView(this);
     setContentView(mWebView);
        
     WebSettings webSettings = mWebView.getSettings();
     webSettings.setJavaScriptEnabled(true);
     mWebView.addJavascriptInterface(new JavaScriptInterface(), "aliasInHtml");
     mWebView.loadUrl("file:///android_asset/my.html"); //加载assets目录下的本地html文件
 }
 class JavaScriptInterface{ 

  //public void getHTML(String html){
  // Log.v("html==", html);
  //}  
  public void startDo(final String parameter){
             mHandler.post(new Runnable(){  //启动线程
                 public void run() {
                  mWebView.loadUrl("javascript:fillContent('"+parameter+"')");//调用javascript代码,这里是调用了

                                                                                                                //JavaScript方法,并传递了一个参数
               

           //   mWebView.loadUrl("javascript:window.aliasInHtml.getHTML('<html>'+document.getElementsByTagName('html')[0].innerHTML+'</html>');");   
    

  }
             });
        }
 }  
}

而放在Android工程的assets目录下的my.html代码如下:

<html>      
    <script language="javascript">       
        function fillContent(p){      
            document.getElementById("content").innerHTML = 'hello:' + p;      
        }
   </script>        
  <body>      
    <a onClick="window.aliasInHtml.startDo('dlut');">call method defined in java code</a>  

    <!-- 调用Java类的方法 -->  
    <p id="content"></p>      
    <p>Tomorrow is another day!!</p>      
  </body>      
</html>

好了,在上面的基础上,如何获得html的代码呢,首先,在JavaScriptInterface类中添加一个方法,供JavaScript调用,从而显示Html内容(即上面代码注释掉的内容):

public void getHTML(String html){
   Log.v("html==", html);
  } 

 而首先在 JavaScript中获得Html中代码,然后调用上面的getHtml方法显示出来,写法为:

 mWebView.loadUrl("javascript:window.aliasInHtml.getHTML('<html>'+document.getElementsByTagName('html')[0].innerHTML+'</html>');");   
当然,触发获得Html的事件完全可以通过其他方式,这里就是点击网页上的连接,比如可以在那个Activity里添加一个Button,点击Button获得网页的内容。 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值