Android WebView获取HTML内容_WebView获取网页元素属性值
2018-10-16 13:10:38  By: dwtedx

在Android开发过程中,我们可能需要做一些模拟操作,可能需要获取HTML页面的一些信息,比如要获取网页中第一个IMG标签的src属性,此时就需要借助重写WebViewClient的onPageFinished方法,在onPageFinished中加载一段js代码,js代码再调用本地方法,具体代码如下:


1、初始化WebView

@SuppressLint("SetJavaScriptEnabled")
private void init() {
    mWebView = (WebView) findViewById(R.id.webView);
    // 开启JavaScript支持
    mWebView.getSettings().setJavaScriptEnabled(true);

    mWebView.addJavascriptInterface(new InJavaScriptLocalObj(), "dwtedx");

    // 设置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://dditblog.com/blog_671.html");

    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.dwtedx.showSource("
                      "document.getElementsByTagName(´img´)[0].src);");

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

    });
}


2、InJavaScriptLocalObj获取值

public final class InJavaScriptLocalObj
{
    @JavascriptInterface
    public void showSource(String src) {
        System.out.println("image src="   src);
    }
}


若资源对你有帮助、浏览后有很大收获、不妨小额打赏我一下、你的鼓励是维持我不断写博客最大动力

想获取DD博客最新代码、你可以扫描下方的二维码、关注DD博客微信公众号(ddblogs)

或者你也可以关注我的新浪微博、了解DD博客的最新动态:DD博客官方微博(dwtedx的微博)

如对资源有任何疑问或觉得仍然有很大的改善空间、可以对该博文进行评论、希望不吝赐教

为保证及时回复、可以使用博客留言板给我留言: DD博客留言板(dwtedx的留言板)

感谢你的访问、祝你生活愉快、工作顺心、欢迎常来逛逛


快速评论


技术评论

  • 该技术还没有评论、赶快抢沙发吧...
DD记账
top
+