android webview 真正實現---儲存整個網頁原始碼
阿新 • • 發佈:2019-01-06
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; }
這個功能花了一週時間,心累!