之前看了一个截取http页面的博客,不记得地址了
本人整理后 大概是这样
protected OnGetHtmListener onGetHtmllistener=null;
public interface OnGetHtmListener{
public void getHtml(String html);
}
protected OnUrlChangeListener OnUrlChangeListener=null;
public interface OnUrlChangeListener{
public void onChange(String url);
}
class MyWebViewClient extends WebViewClient {
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// view.loadUrl("javascript:window.phone.getPhone('<head>'+" +
// "document.getElementsByTagName('MBL_NO')[0].innerHTML+'</head>');");
view.loadUrl(url);
return true;
}
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
}
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
if(OnUrlChangeListener!=null)
OnUrlChangeListener.onChange(url);
view.loadUrl("javascript:window.local_obj.showSource('<head>'+" +
"document.getElementsByTagName('html')[0].innerHTML+'</head>');");
}
@Override
public void onLoadResource(WebView view, String url) {
// TODO Auto-generated method stub
super.onLoadResource(view, url);
}
}
public SWebView(Context context) {
super(context);
onCreate();
}
public SWebView(Context context, AttributeSet attrs) {
super(context, attrs);
onCreate();
}
public SWebView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
onCreate();
}
@SuppressLint({ "JavascriptInterface", "SetJavaScriptEnabled" })
public void onCreate(){
this.getSettings().setJavaScriptEnabled(true);
this.setSaveEnabled(true);
this.getSettings().setAppCacheEnabled(true);
this.requestFocus();
this.addJavascriptInterface(new InJavaScriptLocalObj(), "local_obj");
this.setWebViewClient(new MyWebViewClient());
}
final class InJavaScriptLocalObj {
@JavascriptInterface
public void showSource(String html) {
htmlCont=html;
if(onGetHtmllistener!=null){
onGetHtmllistener.getHtml(html);
}
}
}
protected String htmlCont;
public String getHtmlCont() {
return htmlCont;
}
public OnGetHtmListener getOnGetHtmllistener() {
return onGetHtmllistener;
}
public void setOnGetHtmllistener(OnGetHtmListener onGetHtmllistener) {
this.onGetHtmllistener = onGetHtmllistener;
}
public OnUrlChangeListener getOnUrlChangeListener() {
return OnUrlChangeListener;
}
public void setOnUrlChangeListener(OnUrlChangeListener onUrlChangeListener) {
OnUrlChangeListener = onUrlChangeListener;
}
}
public class SWebView extends WebView{
protected OnGetHtmListener onGetHtmllistener=null;
public interface OnGetHtmListener{
public void getHtml(String html);
}
protected OnUrlChangeListener OnUrlChangeListener=null;
public interface OnUrlChangeListener{
public void onChange(String url);
}
class MyWebViewClient extends WebViewClient {
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
}
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
if(OnUrlChangeListener!=null)
OnUrlChangeListener.onChange(url);
view.loadUrl("javascript:window.local_obj.showSource('<head>'+" +
"document.getElementsByTagName('html')[0].innerHTML+'</head>');"); //截取代码
}
@Override
public void onLoadResource(WebView view, String url) {
// TODO Auto-generated method stub
super.onLoadResource(view, url);
}
}
public SWebView(Context context) {
super(context);
onCreate();
}
public SWebView(Context context, AttributeSet attrs) {
super(context, attrs);
onCreate();
}
public SWebView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
onCreate();
}
@SuppressLint({ "JavascriptInterface", "SetJavaScriptEnabled" })
public void onCreate(){
this.getSettings().setJavaScriptEnabled(true);
this.setSaveEnabled(true);
this.getSettings().setAppCacheEnabled(true);
this.requestFocus();
this.addJavascriptInterface(new InJavaScriptLocalObj(), "local_obj");//注册回调
this.setWebViewClient(new MyWebViewClient());
}
final class InJavaScriptLocalObj {
@JavascriptInterface //sdk 4.3以上版本不添加的话不执行,网上一般说的回调方法不清楚
public void showSource(String html) {
htmlCont=html;
if(onGetHtmllistener!=null){
onGetHtmllistener.getHtml(html);
}
}
}
protected String htmlCont;
public String getHtmlCont() {
return htmlCont;
}
public OnGetHtmListener getOnGetHtmllistener() {
return onGetHtmllistener;
}
public void setOnGetHtmllistener(OnGetHtmListener onGetHtmllistener) {
this.onGetHtmllistener = onGetHtmllistener;
}
public OnUrlChangeListener getOnUrlChangeListener() {
return OnUrlChangeListener;
}
public void setOnUrlChangeListener(OnUrlChangeListener onUrlChangeListener) {
OnUrlChangeListener = onUrlChangeListener;
}
}
注意 :4.4以上版本不能用loadurl
需要调用evaluateJavascript(),第一个参数可以直接写代码 不需要javascript:标签