zoukankan      html  css  js  c++  java
  • 关于原生+WebView js交互、数据传输问题

    原生能接收到webView内控件点击事件,以至拿到点击事件传过来数据 

    1、定义一个接口

    public interface WebHomeOnClickInterface {
        void showStorePicker();        //显示选择框的事件
        void cancelStorePicker();      //选择框消失的事件
    }
    

    2、定义一个类使用该接口

    public class JsInterationHome {
    
        WebHomeOnClickInterface webOnClickInterface;
    
        @JavascriptInterface
        public void showStorePicker(){
            webOnClickInterface.showStorePicker();
        }
        @JavascriptInterface
        public void cancelStorePicker(){
            webOnClickInterface.cancelStorePicker();
        }
    
    
    }

    3、用到WebView的页面使用

    (1)、activity或者fragment继承该接口

    implements  WebHomeOnClickInterface {
    }

    (2)、webView控件的初始化

    WebSettings settings = webView.getSettings();
            settings.setUserAgentString(settings.getUserAgentString().replace("Android", "Android"));
            settings.setCacheMode(WebSettings.LOAD_DEFAULT);
            settings.setDomStorageEnabled(true);
            settings.setDatabaseEnabled(true);
            settings.setRenderPriority(WebSettings.RenderPriority.HIGH);
            settings.setUseWideViewPort(false);  //将图片调整到适合webview的大小
            settings.setLoadWithOverviewMode(true);
            settings.setSupportZoom(false); // 支持缩放
            settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN); //支持内容重新布局
            settings.setDisplayZoomControls(false); //隐藏webview缩放按钮
            settings.setLoadWithOverviewMode(true);
            settings.setBuiltInZoomControls(false); // 显示放大缩小 controler
            settings.setDomStorageEnabled(true);
            settings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
            settings.setTextZoom(100);
            settings.setDefaultZoom(WebSettings.ZoomDensity.CLOSE);// 默认缩放模式
            settings.setLoadsImagesAutomatically(true);
         // 重点!!! 重点!!!
            settings.setJavaScriptEnabled(true);
            webView.addJavascriptInterface(new JsInterationHome(this), "control");//js 交互

     同时设置webView.setWebViewClient();

    webView.setWebViewClient(new WebViewClient() {
    
                @Override
                public void onPageFinished(WebView view, String url) {
                    // 页面加载完成后注册js
                    initJs(view);
                    super.onPageFinished(view, url);
    
                }
                // 其他若干方法隐藏
            });        

     // 具体注解代码

    private void initJs(WebView view) {
            // 判断是否主已经注解js,做过的话不要再次注解js
            if (!isHasInitJs) {
                isHasInitJs = true;
            } else {
                return;
            }
            view.loadUrl("javascript:
    " +
                    "window.addEventListener('route', function(e) {
    " +
                    "  control.interceptUrl(e.detail.pathname, e.detail.href);
    " +
                    "})"
            );
            // 监听保存按钮 ,获取返回值 字符串    把对象转字符串 android再解析
            
           view.evaluateJavascript("javascript:window.addEventListener('showStorePicker',function(e){control.showStorePicker()})", new ValueCallback<String>() {
                        @Override
                        public void onReceiveValue(String value) {
                            Log.i("xqxinfo", "showStorePicker");
                        }
                    }
            );
            view.evaluateJavascript("javascript:window.addEventListener('cancelStorePicker',function(e){control.cancelStorePicker()})", new ValueCallback<String>() {
                        @Override
                        public void onReceiveValue(String value) {
                            Log.i("xqxinfo", "cancelStorePicker");
                        }
                    }
            );
    
        }        

     原生收到web发送的通知后的处理

     @Override
        public void showStorePicker(){
           
        }
    
        @Override
        public void cancelStorePicker() {
    
        }

      

    作者:听着music睡

    出处:http://www.cnblogs.com/xqxacm/

    Android交流群:38197636

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    AD9 如何画4层pcb板
    在Altium Designer 2009下如何添加Logo图
    [置顶] 整数拆分 整合算法
    altium designer 中的top/bottom solder和top/bottom paste mask
    vs2012 与 win7 不兼容的问题
    poj1742 Coins
    poj3181 Dollar Dayz
    poj1065 Wooden Sticks
    poj1631 Bridging signals
    poj3666 Making the Grade
  • 原文地址:https://www.cnblogs.com/xqxacm/p/15432820.html
Copyright © 2011-2022 走看看