WebView是Android上常用的组件之一, 有什么用? 简单而言, 就是一个浏览器, 当然也是一个DIY性能比较强的浏览器, 常见的输入网址并打开浏览, 调用内置的浏览器下载, 屏蔽图片, 在浏览页面内查找内容, 支持Javascript... ... 以上功能或性能都能在WebView中得到实现或支持, 成为一个真正的浏览器. 本节中, 主要讲利用JS获取WebView所加载的当前网站的html源码.
所定义一个简单那的类方法接收js所document.body.innerHTML方法所获取的body源码, 然后在AlerDialog中显示出来. OK, 直接上代码.
<span style="white-space:pre"> </span>public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
wv = (WebView)findViewById(R.id.wv_main);
wv.getSettings().setJavaScriptEnabled(true);
wv.addJavascriptInterface(new getHtmlListener(), "test");
wv.loadUrl("http://m.baidu.com/");
//wv.loadUrl("javascript:window.test.get(document.body.innerHTML);");
//wv.loadUrl("javascript:(function(){ javascript:window.test.get(document.body.innerHTML); })()");
<span style="white-space:pre"> </span>wv.getSettings().setSupportZoom(true);
<span style="white-space:pre"> </span>wv.getSettings().setBuiltInZoomControls(true);
<span style="white-space:pre"> </span>wv.getSettings().setUseWideViewPort(true);
<span style="white-space:pre"> </span>wv.setWebViewClient(new MyWebViewClient());
}
<span style="white-space:pre"> </span>private class MyWebViewClient extends WebViewClient{
<span style="white-space:pre"> </span>public boolean shouldOverrideUrlLoading(WebView view,String url){
<span style="white-space:pre"> </span>/*view.loadUrl(url);*/
<span style="white-space:pre"> </span>return true;
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>public void onPageStarted(WebView view, String url, Bitmap favicon) {
<span style="white-space:pre"> </span>super.onPageStarted(view, url, favicon);
<span style="white-space:pre"> </span> }
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>public void onPageFinished(WebView view, String url) {<span style="white-space:pre"></span><pre name="code" class="java"><span style="white-space:pre"> </span>wv.loadUrl("javascript:window.test.get(document.body.innerHTML);");
super.onPageFinished(view, url);
}
public void onReceivedError(WebView view, int errorCode,
String description, String failingUrl) {
}
</pre><pre name="code" class="java"> class getHtmlListener{
public void get(String data){
//得到源码并显示
new AlertDialog.Builder(ExamineDetialActivity.this).setMessage(data).create().show();
}
}
将以上对应内容换为 wv .loadUrl("javascript:window.local_obj.showSource('<head>'+"
+ "document.getElementsByTagName('
html')[0].innerHTML+'</head>');");
可获取完整内容.
document.getElementByIdx_x("span_id").innerHTML ="内容";
document.getElementByIdx_x("span_id").innerText = "内容";
javascript:window.test.get(document.getElementById("logo").value);
以上2个方法在js中也常见 , 故给出来自己重复记忆下.
android中如何获得webView中的内容