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