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

本文介绍如何通过@JavascriptInterface注解解决Android 4.4及以上版本中JavaScript调用Java方法出现的问题。文中提供了具体的代码示例,展示了如何实现从JS触发Android应用内跳转。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  代码如下:

 //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访问



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值