Android: 在WebView中获取网页源码

1. 使能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());

        webView.loadUrl("http://www.cnblogs.com/hibraincol/");

    }

     

     

   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)中打印了网页源码。

时间: 2024-10-02 08:46:41

Android: 在WebView中获取网页源码的相关文章

webview可以获取网页源码,进行重新排版吗

 private void getHtml_data(String Url, int FontSize) {                 String text = "";                try {                        URL url = new URL(Url);                        URLConnection conn;                         conn = url.openConnec

android获取网页源码问题

问题描述 android获取网页源码问题 以下是我从网上找的获取网页源码的 代码 所有包都已经正常导入 但是编译后 程序一运行就崩溃 求大神指点import 略; /** @author Jasonzhou @since 2013-03-21 @功能 读取网页内容 @说明 获取网页的全部代码后使用jsuop进行处理, 以便得到想要的内容**/ public class MainActivity extends Activity { public String url = ""http:

IHTMLDocument2获取网页源码时总是弹出安全警告

问题描述 .net中当获取网页源码时总是提出安全警告,代码如下:publicstaticstringGetDynamicHtmlFromUrl(stringsinaUrl,Encodingencoding){mshtml.HTMLDocumenthtmldoc=newmshtml.HTMLDocument();mshtml.IHTMLDocument2htmldoc2;mshtml.IHTMLDocument3htmldoc3;IPersistStreamInitips=(IPersistStr

技术-用jsoup抓取网页获取网页源码的时候,得到的源码和在网站上面点击右键查看源码不相同,怎么解决

问题描述 用jsoup抓取网页获取网页源码的时候,得到的源码和在网站上面点击右键查看源码不相同,怎么解决 用jsoup抓取网页获取网页源码的时候,得到的源码和在网站上面点击右键查看源码不相同,怎么解决 Document doc = Jsoup.parse(new URL(url), 5000); 解决方案 一部分html是ajax异步加载的,你得用fiddler调试,得到这些请求,照着写 解决方案二: C++ 抓取网页的源码获取网页的源码获取网页源码工具类

HttpURLConnection获取网页源码 网址太长不能正确获取数据

问题描述 HttpURLConnection获取网页源码 网址太长不能正确获取数据 我用HttpURLConnection获取网页源码 当网址比较长的时候就无法正确连接到网页是怎么回事? 代码如下: private String getURLResponse(String urlString){ HttpURLConnection conn = null; //连接对象 InputStream is = null; String resultData = ""; try { URL u

utf-8-WinHttpRequst获取网页源码乱码

问题描述 WinHttpRequst获取网页源码乱码 返回的网页编码是utf-8的,我这样转显示乱码,应该怎么做 CString strRetData; _variant_t varRspBody = pHttpReq->GetResponseBody(); char *pContentBuffer = (char *)varRspBody.parray->pvData; strRetData = pContentBuffer; 解决方案 获取网页源码c# 获取网页源码C#获取网页源码 解决方

ie源码-VB获取网页源码,高手指导!

问题描述 VB获取网页源码,高手指导! Private Sub Command4_Click() ' On Error Resume Next Dim baiIE As Object For Each baiIE In dWinFolder If InStr(1, baiIE.FullName, "", vbTextCompare) <> 0 Then If InStr(1, baiIE.LocationURL, "www.taobao.com", vb

java获取网页源码的问题

问题描述 我用java获取到网页的源代码,url为www.google.com/#q=测试这个链接在浏览器中正常解析为简体,即浏览器中的html源码为UTf-8格式,而我用java程序抓下来的html却为big5格式的,不知道这是为什么,求大神解答,谢谢!!! 解决方案 解决方案二:你的java编码是big5的吧

【Android开发】网络通信之网页源码查看器

今天学习了安卓开发中有关网络通信相关的东西. 根据教学视频,我按照步骤写了一个"网页源码查看器".通过写这个东西,我学会了使用URL和 HttpURLConnection取得与网站的链接   部分链接代码: /* * 获取网页html源代码: * path 网页路径 * */ public static String getHtml(String path) throws Exception{ //将path包装成一个URL对象 URL url=new URL(path); //取得链