<img src="http://ww1.sinaimg.cn/large/0066P23Wjw1f9rym3y697j30300300sj.jpg" title="Engadget 中文版" alt="" class="site-img">
网页中img节点的内容。
Java代码
public class ImageClickInterface {
private Context context;
public ImageClickInterface(Context context) {
this.context = context;
}
@JavascriptInterface
public void imageClick(String imgUrl, String hasLink) {
Log.e("----点击了图片 url: ", "" + imgUrl + hasLink);
}
@JavascriptInterface
public void textClick(String type, String item_pk) {
if (!TextUtils.isEmpty(type) && !TextUtils.isEmpty(item_pk)) {
Toast.makeText(context, "----点击了文字", Toast.LENGTH_SHORT).show();
}
Log.e("----点击了图片 url: ", "" + type);
}
}
webView.addJavascriptInterface(new ImageClickInterface(this), "injectedObject");
addJavascriptInterface(Object objext, String string)第二个参数用于addImageClickListener()遍历节点时链接到Java代码
public void addImageClickListener() {
// 这段js函数的功能就是,遍历所有的img节点,并添加onclick函数,函数的功能是在图片点击的时候调用本地java接口并传递url过去
// 如要点击一张图片在弹出的页面查看所有的图片集合,则获取的值应该是个图片数组
webView.loadUrl("javascript:(function(){" +
"var objs = document.getElementsByTagName(\"img\");" +
"for(var i=0;i<objs.length;i++)" +
"{" +
"objs[i].onclick=function(){window.injectedObject.imageClick(this.getAttribute(\"src\"),this.getAttribute(\"has_link\"));}" +
"}" +
"})()");
// 遍历所有的a节点,将节点里的属性传递过去(属性自定义,用于页面跳转)
webView.loadUrl("javascript:(function(){" +
"var objs =document.getElementsByTagName(\"a\");" +
"for(var i=0;i<objs.length;i++)" +
"{" +
"objs[i].onclick=function(){" +
"window.injectedObject.textClick(this.getAttribute(\"type\"),this.getAttribute(\"item_pk\"));}" +
"}" +
"})()");
}
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
addImageClickListener();
super.onPageFinished(view, url);
}
});
最后需要重写WebViewClient的onPageFinished(),在里面将js方法注入到html中。
网友评论