zoukankan      html  css  js  c++  java
  • 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);
        }
  • 相关阅读:
    js中null " "的区别
    简略的地图API应用
    JSON的一个例子(代码来源于网上)
    浅谈Event Flow、Process、Method及其Applications
    JS中object与constructor的分析
    浅谈for...in与for....of
    浅谈语言的过去与未来
    正则表达式的四个小应用
    BOM详细
    BOM
  • 原文地址:https://www.cnblogs.com/gongcb/p/3363226.html
Copyright © 2011-2022 走看看