• Android:WebView深入使用


            webView = (WebView) findViewById(R.id.info_detail_webview);
            WebSettings webSettings = webView.getSettings();
            webSettings.setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);
            webSettings.setJavaScriptEnabled(true);
            
            // 添加js交互接口类,并起别名 imagelistner
            LogUtil.verbose("json", "url= " + newsList.Url);
            webView.loadUrl(newsList.Url);
            
            // 添加js交互接口类,并起别名 imagelistner
            webView.addJavascriptInterface(new JavascriptInterface(this), "imagelistner");
            webView.setWebViewClient(new MyWebViewClient());

    监听接口:

        // js通信接口
        public class JavascriptInterface {
    
            private Context context;
    
            public JavascriptInterface(Context context) {
                this.context = context;
            }
    
            public void openImage(String img) {
                LogUtil.verbose("json", "img= " + img);
                Intent intent = new Intent();
                intent.putExtra("image", img);
                intent.setClass(context, ShowWebImageActivity.class);
                context.startActivity(intent);
            }
        }
        
        // 注入js函数监听
        private void addImageClickListner() {
            // 这段js函数的功能就是,遍历所有的img几点,并添加onclick函数,在还是执行的时候调用本地接口传递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);  " + 
            "    }  " + 
            "}" + 
            "})()");
        }

    重写WebViewClient:

        /** 监听WebView加载URL进度  **/
        class MyWebViewClient extends WebViewClient {
    
            @Override
            public void onPageFinished(WebView view, String url) {
                // TODO Auto-generated method stub
                view.getSettings().setJavaScriptEnabled(true);
                // html加载完成之后,添加监听图片的点击js函数
                addImageClickListner();
                
                hideTopProgressBar();
                super.onPageFinished(view, url);
            }
    
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                // TODO Auto-generated method stub
                return super.shouldOverrideUrlLoading(view, url);
            }
    
            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                // TODO Auto-generated method stub
                view.getSettings().setJavaScriptEnabled(true);
                super.onPageStarted(view, url, favicon);
            }
            
        }

    拦截系统Back事件:

        @Override
        public boolean onKeyDown(int keyCode, KeyEvent event) {
            // TODO Auto-generated method stub
            // 拦截系统的返回事件 调用webview的
            if(webView.canGoBack() && keyCode == KeyEvent.KEYCODE_BACK){
                webView.goBack();   
                return true;
            }
            return super.onKeyDown(keyCode, event);
        }
  • 相关阅读:
    1.17 Python基础知识
    反射
    面向对象——类
    异常处理
    面向对象——静态方法、类方法、属性法法,其他特殊方法
    面向对象——继承
    question
    configparser模块
    hashlib模块
    shelve模块
  • 原文地址:https://www.cnblogs.com/gongcb/p/3363226.html
Copyright © 2020-2023  润新知