Android: 在WebView中获取网页源码
- - ITeye博客 使能javascript:. 编写自己的WebViewClient,并在onPageFinished中提取网页源码. 运行,可以看到在showSource(String html)中打印了网页源码. 已有   0 人发表留言,猛击->>  这里<<-参与讨论. —软件人才免语言低担保 赴美带薪读研. 
使能javascript:
| 
       1 
 | 
     
      webView.getSettings().setJavaScriptEnabled(        true        );
 | 
2. 编写本地接口
| 
       1 
      2 
      3 
      4 
      5 
 | 
     
      final         class         InJavaScriptLocalObj {
            public         void         showSource(String html) {
                Log.d(        "HTML"        , html);
            }
} | 
  
3. 向网页暴露本地接口
| 
       1 
 | 
     
      webView.addJavascriptInterface(        new         InJavaScriptLocalObj(),         "local_obj"        );
 | 
  
4. 编写自己的WebViewClient,并在onPageFinished中提取网页源码。
| 
       1 
      2 
      3 
      4 
      5 
      6 
      7 
      8 
      9 
      10 
      11 
      12 
      13 
      14 
      15 
      16 
 | 
     
      final         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) {
                Log.d(        "WebView"        ,        "onPageStarted"        );
                super        .onPageStarted(view, url, favicon);
            }    
            public         void         onPageFinished(WebView view, String url) {
                Log.d(        "WebView"        ,        "onPageFinished "        );
                view.loadUrl(        "javascript:window.local_obj.showSource('<head>'+"         +
                        "document.getElementsByTagName('html')[0].innerHTML+'</head>');"        );
                super        .onPageFinished(view, url);
            }
} | 
组合在一起的代码为:
| 
       1 
      2 
      3 
      4 
      5 
      6 
      7 
      8 
      9 
      10 
      11 
      12 
      13 
      14 
      15 
      16 
      17 
      18 
      19 
      20 
      21 
      22 
      23 
      24 
      25 
      26 
      27 
      28 
      29 
      30 
      31 
      32 
      33 
      34 
      35 
      36 
      37 
      38 
      39 
      40 
      41 
      42 
      43 
      44 
      45 
      46 
      47 
 | 
     
      package         com.hi.briancol.htmlsource;
import         android.app.Activity;
import         android.graphics.Bitmap;
import         android.os.Bundle;
import         android.util.Log;
import         android.webkit.WebView;
import         android.webkit.WebViewClient;
public         class         HtmlSource         extends         Activity {
            private         WebView webView;
            /** Called when the activity is first created. */
            @Override
            public         void         onCreate(Bundle savedInstanceState) {
                super        .onCreate(savedInstanceState);
                setContentView(R.layout.main);
                webView = (WebView)findViewById(R.id.webview);
                webView.getSettings().setJavaScriptEnabled(        true        );
                webView.addJavascriptInterface(        new         InJavaScriptLocalObj(),         "local_obj"        );
                webView.setWebViewClient(        new         MyWebViewClient());
            }
                     final         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) {
                    Log.d(        "WebView"        ,        "onPageStarted"        );
                    super        .onPageStarted(view, url, favicon);
                }    
                public         void         onPageFinished(WebView view, String url) {
                    Log.d(        "WebView"        ,        "onPageFinished "        );
                    view.loadUrl(        "javascript:window.local_obj.showSource('<head>'+"         +
                            "document.getElementsByTagName('html')[0].innerHTML+'</head>');"        );
                    super        .onPageFinished(view, url);
                }
            }
                 final         class         InJavaScriptLocalObj {
                public         void         showSource(String html) {
                    Log.d(        "HTML"        , html);
                }
            }
} | 
关键之处在于:
view.loadUrl("javascript:window.local_obj.showSource('<head>'+document.getElementsByTagName('html')[0].innerHTML+'</head>');");
运行,可以看到在showSource(String html)中打印了网页源码。