代码如下:
//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访问