美文网首页
Android webview js交互, 响应webview

Android webview js交互, 响应webview

作者: 天空在微笑 | 来源:发表于2018-10-19 14:05 被阅读16次

思路:
①自定义interface

class MyJavaScriptInterface {
        public MyJavaScriptInterface() {
        }
        @JavascriptInterface
        public void openImage(String img) {
            System.out.println(img);
//          ToastUtils.longToast("openPhotoOnAndroid");
            Intent intent = new Intent(BrowserActivity.this, ViewPagerActivity.class);
            ArrayList<String> mImgUrlList = new ArrayList<>();
            mImgUrlList.add(img);
            intent.putStringArrayListExtra("IMG_LIST", mImgUrlList);
            startActivity(intent);
        }
        @JavascriptInterface
        public void openPhotoOnAndroid(final String index, final String jsonStr) {
            runOnUiThread(new Runnable() {
                public void run() {
//                            int j = i;
//                            j++;
//                            //Log.v("TAG", "index:"+"jsonStr:");
//                    //Log.v("TAG", "index:"+index+"jsonStr:"+ jsonStr);
//                    shortToast("openPhotoOnAndroid");
                    ArrayList<ImageBean> imgList = new Gson().fromJson(jsonStr, new TypeToken<ArrayList<ImageBean>>() {
                    }.getType());
                    Intent intent = new Intent(BrowserActivity.this, ViewPagerActivity.class);
                    intent.putExtra("START_INDEX", Integer.valueOf(index));
                    ArrayList<String> mImgUrlList = new ArrayList<>();
                    for (ImageBean imageBean : imgList) {
                        mImgUrlList.add(imageBean.getSrc());
                    }
                    intent.putStringArrayListExtra("IMG_LIST", mImgUrlList);
                    startActivity(intent);
//                            Toast.makeText(EvaluateDetailActivity.this, "测试调用java" + String.valueOf(index), Toast.LENGTH_LONG).show();
                }
            });
        }
        @JavascriptInterface
        public void resize(final float height) {
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    //Toast.makeText(getActivity(), height + "", Toast.LENGTH_LONG).show();
                    //此处的 layoutParmas 需要根据父控件类型进行区分,这里为了简单就不这么做了
                    mWebView.setLayoutParams(new RelativeLayout.LayoutParams(getResources().getDisplayMetrics().widthPixels, (int) (height * getResources().getDisplayMetrics().density)));
                }
            });
        }
    }

②通过webview交互接口,为html页面提供js函数

webVieww.addJavascriptInterface(new MyJavaScriptInterface(this), "imagelistner");

③为img标签注册listener

// 注入js函数监听
    private void addImageClickListner() {
        // 这段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.imagelistner.openImage(this.src);  " + 
        "    }  " + 
        "}" + 
        "})()");
    }

相关文章

网友评论

      本文标题:Android webview js交互, 响应webview

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