Android 和JavaScript 中的java方法加 @JavascriptInterface的原因分析:

来源:互联网 发布:跳跃网络ceo吴亚西 编辑:程序博客网 时间:2024/04/26 11:15

  代码如下:

 //js调用安卓代码    private class JavaScriptinterface {        private Context mContext;        public JavaScriptinterface(Context c) {            this.mContext = c;        }        //获取消费者id        @JavascriptInterface  //该注解解决:Uncaught TypeError: Object [object Object] has no method 'onItemClickGo' 该异常方法.        public void onItemClickGo(final String proId) {//这个方法名,给给js            new Handler().post(new Runnable() {                @Override                public void run() {                    Intent intent = new Intent(BrowserActivity.this, CommodityDetailActivity.class);                    intent.putExtra(CommodityDetailActivity.commodityid, proId);                    startActivity(intent);                }            });        }        //跳转订单列表        @JavascriptInterface        public void onSeeOrder() {//这个方法名,给给js            new Handler().post(new Runnable() {                @Override                public void run() {                    app.manager.finishActivity(MyOrdersActivity.class);                    Intent intent = new Intent(BrowserActivity.this, MyOrdersActivity.class);                    intent.putExtra(MyOrdersActivity.index, 2);                    startActivity(intent);                    finish();                }            });        }
}
  原因如下:

    1. 不加android4.4版本及之前是没有问题的, 4.4之后就会出现这个错误。

"Uncaught TypeError: Object [object Object] has no method 'onItemClickGo"
  2.webview允许JavaScript 控制宿主应用程序,这是个很强大的特性,但同时,在4.2的版本前存在重大安全隐患,因为JavaScript 可以使用反射访问注入webview的java对象的public fields,在一个包含不信任内容的WebView中使用这个方法,会允许攻击者去篡改宿主应用程序,使用宿主应用程序的权限执行java代码。因此4.2以后,任何为JS暴露的接口,都需要加
@JavascriptInterface

注解,这样,这个Java对象的fields 将不允许被JS访问



阅读全文
0 0
原创粉丝点击