您的位置:首页 > 移动开发

工作中遇到的问题之WebView与JS交互问题

2014-08-08 10:32 387 查看
客户端中新迭代的功能中,在首页添加Webview控件,并且要求Android能够监听到WebView中的点击事件,获得对应内容下的URL,然后将获得的URl跳转到公用的WebviewActivity中。

开始时并没有什么思路,只是问同事说能够做到,于是我就在网上搜索相关问题,在http://www.tuicool.com/articles/3mQvAj这个网页中终于找到了自己想要的内容,然后布置到上边,居然成功了,非常高兴,非常感谢里面的作者!但是随着我提交测试,发现有的手机点击有效果,有的手机点击后根本没有反应,我就纳闷了,然后反复核对自己的代码,还是没有找到原因,然后又让同事帮忙,和同事一起搜索原因,最后发现http://www.xuephp.com/main/detail.php?cid=35708这篇文章,才知道4.22添加的新规则,如果要使用js调用android类的方法,必须加上一条注解:
@JavascriptInterface,然后提交测试,耶!成功了!现在把自己的相关代码贴上,希望对自己和同样遇到此问题的人有帮助!


wv_firstview=(WebView)findViewById(R.id.wv_firstview);
wv_firstview.getSettings().setJavaScriptEnabled(true);
wv_firstview.loadUrl(Constants.APP_DOMAIN + "sjyyt/index-active.html");
class JSObject {
@JavascriptInterface 
   public void openImage(String img) {
     System.out.println(img);
     //
     Log.d("客户端", Constants.APP_DOMAIN +"sjyyt/" + img);
     Intent intent = new Intent();
     intent.putExtra("url",Constants.APP_DOMAIN +"sjyyt/" + img);
     intent.setClass(context, WebviewActivity.class);
     context.startActivity(intent);
     System.out.println(img);
   }
 }
wv_firstview.addJavascriptInterface(new JSObject(), "imagelistner");
wv_firstview.setWebViewClient(new MyWebViewClient());


// 注入js函数监听
 private void addImageClickListner() {
   // 这段js函数的功能就是,遍历所有的img几点,并添加onclick函数,函数的功能是在图片点击的时候调用本地java接口并传递url过去
 Log.d("客户端", "!!!!!!图片的点击事件");
  wv_firstview.loadUrl("javascript:(function(){" +
   "var objs = document.getElementsByClassName(\"active\"); " +
       "for(var i=0;i<objs.length;i++)  " + 
   "{"
       +"    objs[i].onclick=function()  " + 
   "    {  " 
      +"        window.imagelistner.openImage(this.getAttribute('data-url'));  " + 
   "    }  " + 
   "}" + 
   "})()");
   Log.d("客户端", "^^^^^^^^图片的点击事件");

 }

 // js通信接口
 
 // 监听
 private class MyWebViewClient extends WebViewClient {
   @Override
   public boolean shouldOverrideUrlLoading(WebView view, String url) {
    Log.d("客户端", "!111111图片的点击事件");
     return super.shouldOverrideUrlLoading(view, url);
     
   }
   @SuppressLint("SetJavaScriptEnabled")
@Override
   public void onPageFinished(WebView view, String url) {

     view.getSettings().setJavaScriptEnabled(true);

     super.onPageFinished(view, url);
     // html加载完成之后,添加监听图片的点击js函数
     Log.d("客户端", "???????图片的点击事件");
     addImageClickListner();
     Log.d("客户端", "图片的点击事件");

   }

   @SuppressLint("SetJavaScriptEnabled")
@Override
   public void onPageStarted(WebView view, String url, Bitmap favicon) {
     view.getSettings().setJavaScriptEnabled(true);

     super.onPageStarted(view, url, favicon);
   }

   @Override
   public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {

     super.onReceivedError(view, errorCode, description, failingUrl);

   }
 }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: