美文网首页
Android WebView与Js交互

Android WebView与Js交互

作者: Gear_033e | 来源:发表于2017-11-13 16:57 被阅读23次
<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中。

相关文章

网友评论

      本文标题:Android WebView与Js交互

      本文链接:https://www.haomeiwen.com/subject/rwbzmxtx.html