Android WebView图片查看

1、在WebViewClient的onPageFinished里面调用如下方法

private void addImageClickListener(WebView webView) {
        webView.loadUrl("javascript:(function(){" +
                "var objs = document.getElementsByTagName(\"img\"); " +
                "var imgsxx = new Array(objs.length);" +
                "for(var i=0;i<objs.length;i++)  " +
                "{"
                + "    imgsxx[i]=objs[i].src;"
                + "     var position=i;"
                + "    objs[i].οnclick=function()  " +
                "    {  "
                + "        window.imageListener.open(imgsxx,this.src);  " +//通过js代码找到标签为img的代码块,设置点击的监听方法与本地的openImage方法进行连接
                "    }  " +
                "}" +
                "})()");
    }

或用下面的JS,

function androidImg(){
            var objs = document.getElementsByTagName('img');
            var imgs = [];
            for (var i = 0; i < objs.length; i ++) {
                imgs.push(objs[i].src);
            }
            function test(i, imgs, position){
                objs[i].onclick = function(){
                    // window.imageListener = {};
                    alert(position)
                    window.imageListener.open(imgs, position);
                }
            }
            for (var i = 0; i < objs.length; i ++) {
                test(i, imgs, i);
            }
        }

2、定义JS交互接口MJavascriptInterface

public class MJavascriptInterface {

    private Activity mActivity;

    public MJavascriptInterface(Activity activity) {
        mActivity = activity;
    }


    /**
     *
     * @param imgs
     * @param img
     */
    @android.webkit.JavascriptInterface
    public void open(final String[] imgs, final String img) {

    }

	@android.webkit.JavascriptInterface
    public void open(final String[] imgs, final int index) {
       
    }

}

3、WebView设置

WebSettings webSettings = getSettings();
        webSettings.setUserAgentString(webSettings.getUserAgentString());
        webSettings.setJavaScriptEnabled(true); // 设置webview支持JavaScript
        addJavascriptInterface(new MJavascriptInterface((Activity) getContext()), "imageListener");
        webSettings.setJavaScriptCanOpenWindowsAutomatically(true);

4、注意

如果是服务端返回html中包含JS代码,则注意JS中不要有注释,感觉像是部分手机会把html和JS压缩成一行,这样注释就会把正常代码也注释掉。oppo、vivo和华为部分手机。

如下面带注释的代码可能会出现问题:

<script type="text/javascript">
function androidImg(){
		var objs = document.getElementsByTagName('img');
		var imgs = [];
		for (var i = 0; i < objs.length; i ++) {
		imgs.push(objs[i].src);
		}
		function imgClick(imgs, position){
			objs[position].onclick = function(){
					window.imageListener.open(imgs, position);
			}
		}
		for (var i = 0; i < objs.length; i ++) {
			imgClick(imgs, i);
		}
}

// 安卓或者ios
androidImg();</script>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值