android webview 真正实现---保存整个网页源码

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;
    }

这个功能花了一周时间,心累!


猜你喜欢

转载自blog.csdn.net/qq_29364417/article/details/78468859