webview部分:
webView = (WebView) findViewById(R.id.webview);
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webView.addJavascriptInterface(new JsInterface(), "JsInterface");
webView.loadUrl("view-source:https://www.baidu.com/");
webView.setWebViewClient(new WebViewClient(){
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
Log.i(TAG,"onPageFinished=="+url);
String js="document.execCommand('selectall');"+
"var txt;" +
"if (window.getSelection) {" +
"txt = window.getSelection().toString();" +
"} else if (window.document.getSelection) {" +
"txt = window.document.getSelection().toString();" +
"} else if (window.document.selection) {" +
"txt = window.document.selection.createRange().text;" +
"}"+
"var charactersets = document.characterSet;"+
"JsInterface.getHtmlSource(txt,charactersets);";
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
webView.evaluateJavascript("javascript:" + js, null);
Log.i(TAG, "evaluateJavascript-javascript");
} else {
webView.loadUrl("javascript:" + js);
Log.i(TAG, "loadUrl-javascript");
}
}
});
}
js回调:
class JsInterface{
@JavascriptInterface
public void getHtmlSource(String html,String charactersets){
Log.i(TAG,"getHtmlSource=="+html);
mHtml=html;
mCharactersets=charactersets;
mHandler.sendEmptyMessage(100);
}
}
private Handler mHandler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
saveHtml(mHtml,mCharactersets);
}
};
保存到本地:
public boolean saveHtml(String html,String charactersets) {
System.out.println("SaveHtml======================");
SimpleDateFormat simpleDateFormat =new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss-SSS");
String name=simpleDateFormat.format(new Date())+".html";
File file =new File(Environment.getExternalStorageDirectory()+File.separator+Environment.DIRECTORY_DOWNLOADS+File.separator+name);
try {
if(file.exists()){
file.delete();
}
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
try {
Writer out = null;
out = new OutputStreamWriter(new FileOutputStream(file.getAbsolutePath(), false), charactersets);
out.write(html);
out.close();
Log.i(TAG,"saveHtml=="+file.getAbsolutePath());
} catch (Exception e) {
return false;
}
return true;
}
这个功能花了一周时间,心累!