调用js代码获取webView页面中的所有图片及点击事件

来源:互联网 发布:淘宝领券链接 编辑:程序博客网 时间:2024/06/13 09:26

一、获取webView页面中的所有图片
关于webView初始化那些,就不做说明了,只讲js代码
1、在展示webView的activity中写一个方法和一个内部类

// 添加自定义的js    public void addLocalJs() {        webView.loadUrl("javascript:(function(){ " + "var objs = document.getElementsByTagName(\"img\");"                + " var array=new Array(); " + " for(var j=0;j<objs.length;j++){ " + "array[j]=objs[j].src;" + " }  "                + "window.imagelistner.getImage(array);   })()");    }
// 自定义的本地js方法    private class JsInterface {        private Context context;        public JsInterface(Context context) {            this.context = context;        }        @JavascriptInterface        public void getImage(String[] urls) {            Log.i("chen", "========进入js方法========");            if (urls != null && urls.length > 0) {                for (int i = 0; i < urls.length; i++) {                    Log.i("===" + i + "===", urls[i]);                }            }        }    }

2、在webView的代理类的onPageFinished方法中调用

     @Override        public void onPageFinished(WebView view, String url) {            view.getSettings().setJavaScriptEnabled(true);            super.onPageFinished(view, url);            Log.i("chen", "加载完成-----" + url);            view.getSettings().setBlockNetworkImage(false);            addLocalJs();        }

3、在初始化webView的过程中加上一句话:

webView.addJavascriptInterface(new JsInterface(context), "imagelistner");

如图:
这里写图片描述

这样,在webView加载完成以后,就会打印出当前网页中的所有图片的url
注:
1、不要用数据会频繁刷新的网页。如:百度网页。
我做过测试,加载百度网页的时候,打印出的图片地址,放到浏览器以后,展示的内容和手机上加载出的相同位置的图片是不一样的。因为每次刷新百度界面,展示的图片都不一样。要用内容较稳定的试。
2、注意步骤3中最后的imagelistner
这里写图片描述

——————————–分割线————————————-

点击某个图片,去另一个activity,默认展示点击的图片,同时把当前界面所有图片传过去

 // 添加自定义的js    public void addLocalJs() {        blogWeb.loadUrl("javascript:(function(){ " + "var objs = document.getElementsByTagName(\"img\");"                + " var array=new Array(); " + " for(var j=0;j<objs.length;j++){ " + "array[j]=objs[j].src;" + " }  "                + "for(var i=0;i<objs.length;i++){"                + "objs[i].onclick=function(){  window.imagelistner.openImage(this.src,array);" + "}  " + "}    })()");    }
// 自定义的本地js方法    private class JsInterface {        private Context context;        public JsInterface(Context context) {            this.context = context;        }        @JavascriptInterface        public void openImage(String nowUrl, String[] urls) {            //nowUrl是点击的图片的url,urls是当前界面的所有图片的url            Intent intent = new Intent(context, ShowWebImageActivity.class);            ......            ......            ......            context.startActivity(intent);        }    }

其他同上

1 0
原创粉丝点击