`
mmdev
  • 浏览: 12954911 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

Android: 在WebView中获取网页源码

 
阅读更多

1. 使能javascript:

?
1
webView.getSettings().setJavaScriptEnabled(true);

2. 编写本地接口

?
1
2
3
4
5
finalclassInJavaScriptLocalObj {
publicvoidshowSource(String html) {
Log.d("HTML", html);
}
}


3. 向网页暴露本地接口

?
1
webView.addJavascriptInterface(newInJavaScriptLocalObj(), "local_obj");


4. 编写自己的WebViewClient,并在onPageFinished中提取网页源码。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
finalclassMyWebViewClient extendsWebViewClient{
publicbooleanshouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
returntrue;
}
publicvoidonPageStarted(WebView view, String url, Bitmap favicon) {
Log.d("WebView","onPageStarted");
super.onPageStarted(view, url, favicon);
}
publicvoidonPageFinished(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
packagecom.hi.briancol.htmlsource;
importandroid.app.Activity;
importandroid.graphics.Bitmap;
importandroid.os.Bundle;
importandroid.util.Log;
importandroid.webkit.WebView;
importandroid.webkit.WebViewClient;
publicclassHtmlSource extendsActivity {
privateWebView webView;
/** Called when the activity is first created. */
@Override
publicvoidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
webView = (WebView)findViewById(R.id.webview);
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(newInJavaScriptLocalObj(), "local_obj");
webView.setWebViewClient(newMyWebViewClient());
}
finalclassMyWebViewClient extendsWebViewClient{
publicbooleanshouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
returntrue;
}
publicvoidonPageStarted(WebView view, String url, Bitmap favicon) {
Log.d("WebView","onPageStarted");
super.onPageStarted(view, url, favicon);
}
publicvoidonPageFinished(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);
}
}
finalclassInJavaScriptLocalObj {
publicvoidshowSource(String html) {
Log.d("HTML", html);
}
}
}

关键之处在于:

view.loadUrl("javascript:window.local_obj.showSource('<head>'+document.getElementsByTagName('html')[0].innerHTML+'</head>');");

运行,可以看到在showSource(String html)中打印了网页源码。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics