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());

監聽接口:javascript

    // 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:html

    /** 監聽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事件:java

    @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);
    }
相關文章
相關標籤/搜索