1. 程式人生 > >Android通過WebView獲取解析html內容

Android通過WebView獲取解析html內容



童話美景

概述

在Android開發過程中,我們可能需要做一些模擬操作,可能需要獲取HTML頁面的一些資訊,此時就需要藉助重寫WebViewClientonPageFinished方法,在onPageFinished中載入一段js程式碼,js程式碼再呼叫本地方法,具體程式碼如下:

/**
 * Dmeo說明: 當WebView載入網頁時獲取該網頁中的內容.
 */
public class MainActivity extends Activity
{
    private WebView mWebView;
    String na;

    @Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); } @SuppressLint("SetJavaScriptEnabled") private void init() { mWebView = (WebView) findViewById(R.id.webView); // 開啟JavaScript支援
mWebView.getSettings().setJavaScriptEnabled(true); mWebView.addJavascriptInterface(new InJavaScriptLocalObj(), "java_obj"); // 設定WebView是否支援使用螢幕控制元件或手勢進行縮放,預設是true,支援縮放 mWebView.getSettings().setSupportZoom(true); // 設定WebView是否使用其內建的變焦機制,該機制集合螢幕縮放控制元件使用,預設是false,不使用內建變焦機制。
mWebView.getSettings().setBuiltInZoomControls(true); // 設定是否開啟DOM儲存API許可權,預設false,未開啟,設定為true,WebView能夠使用DOM storage API mWebView.getSettings().setDomStorageEnabled(true); // 觸控焦點起作用.如果不設定,則在點選網頁文字輸入框時,不能彈出軟鍵盤及不響應其他的一些事件。 mWebView.requestFocus(); // 設定此屬性,可任意比例縮放,設定webview推薦使用的視窗 mWebView.getSettings().setUseWideViewPort(true); // 設定webview載入的頁面的模式,縮放至螢幕的大小 mWebView.getSettings().setLoadWithOverviewMode(true); // 載入連結 mWebView.loadUrl("http://m.qiaocat.com/topic-618_topic/topicIndex"); mWebView.setWebViewClient(new WebViewClient() { @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { // 在開始載入網頁時會回撥 super.onPageStarted(view, url, favicon); } @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { // 攔截 url 跳轉,在裡邊新增點選連結跳轉或者操作 view.loadUrl(url); return true; } @Override public void onPageFinished(WebView view, String url) { // 在結束載入網頁時會回撥 // 獲取頁面內容 view.loadUrl("javascript:window.java_obj.showSource(" + "document.getElementsByTagName('html')[0].innerHTML);"); // 獲取解析<meta name="share-description" content="獲取到的值"> view.loadUrl("javascript:window.java_obj.showDescription(" + "document.querySelector('meta[name=\"share-description\"]').getAttribute('content')" + ");"); super.onPageFinished(view, url); } @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { // 載入錯誤的時候會回撥,在其中可做錯誤處理,比如再請求載入一次,或者提示404的錯誤頁面 super.onReceivedError(view, errorCode, description, failingUrl); } @Override public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) { // 在每一次請求資源時,都會通過這個函式來回調 return super.shouldInterceptRequest(view, request); } }); } public final class InJavaScriptLocalObj { @JavascriptInterface public void showSource(String html) { System.out.println("====>html=" + html); } @JavascriptInterface public void showDescription(String str) { System.out.println("====>html=" + str); } } }