原文鏈接:http://www.cnblogs.com/hibraincol/archive/2011/10/26/2224866.html
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()); } 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)中打印了網頁源碼。