Android开发之通过WebView查看HTML源码的方法

老套路先看图:

说下思路:

通过android调用JS方法获取HTML标签等源码,核心代码就一行:

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

这里面坑也挺多的,我代码里面都有坑的注释

下面是全部代码:

package cn.xiayiye5.html.data.source;

import android.annotation.SuppressLint;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.webkit.JavascriptInterface;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

/**
 * @author xiayiye5
 * 2020年10月26日09:49:48
 */
public class JavaDataSourceActivity extends AppCompatActivity {
    /**
     * 下面的这个注解一定要添加
     *
     * @param savedInstanceState 注解
     */
    @SuppressLint({"SetJavaScriptEnabled", "AddJavascriptInterface"})
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_html_data_source);
        WebView webViewDataSource = findViewById(R.id.webViewDataSource);
        webViewDataSource.getSettings().setJavaScriptEnabled(true);
        webViewDataSource.addJavascriptInterface(new InJavaScriptLocalObj(), "local_obj");
        webViewDataSource.setWebViewClient(new MyWebViewClient());
        String url = getIntent().getStringExtra("url");
        assert url != null;
        webViewDataSource.loadUrl(url);
    }

    final class MyWebViewClient extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            Log.d("WebView", "onPageStarted");
            super.onPageStarted(view, url, favicon);
        }

        @Override
        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);
        }
    }

    private String htmlData;

    final class InJavaScriptLocalObj {
        @JavascriptInterface
        public void showSource(String html) {
            Log.e("html源码打印", html);
            htmlData = html;
        }
    }

    public void showNetPageData(View view) {
        Intent intent = new Intent(this, HtmlDataSourceActivity.class);
        if (TextUtils.isEmpty(htmlData)) {
            Toast.makeText(this, "源码数据获取失败,请退出重试!", Toast.LENGTH_SHORT).show();
            return;
        }
        intent.putExtra("html_data", htmlData);
        startActivity(intent);
    }
}

我上面gif图时区分java和kotlin的。如果聚德麻烦想直接看源码的请看下面:

点击下载WebView获取HTML源码的demo

在此感谢提供避坑的兄弟:博主直达

猜你喜欢

转载自blog.csdn.net/xiayiye5/article/details/109285567