WebView与JS交互代码没有被调用问题
2016-09-12 本文已影响69人
安卓小生
WebView与JS交互代码没有被调用问题
今天遇到一个需求,就是客户端调用webview,客户端点击的时候服务端判断有没有登录,登录就可以进行点赞、评论啥的,没有登录就调出Android原生的登录界面。
-
html中通过js调用java代码
js中调用java代码其实就记住一点,webview设置一个和js交互的接口(注意这里只是一般的意思,并不是java中接口的含义),这个接口其实是一个一般的类,同时为这个接口取一个别名。这个过程如下:
webView.addJavascriptInterface(new AndroidJSI(), “AndroidJSI”);
new AndroidJSI()就是这个接口,AndroidJSI就是这个接口的别名。上面的代码执行之后在html的js中就能通过别名(这里是 “AndroidJSI”)来调用new AndroidJSI()类中的任何方法。
开始的时候我是这么写的,发现没有登录的时候,点击webview上的按钮,并没有调出登录界面,如下:
private final class AndroidJSI {
public void login() {
if (!DataManager.isLogined()) {
IntentUtil.gotoActivity(getContext(), LoginActivity.class);
}
}
}
查找资料发现:但是因为安全问题,在Android4.2中(如果应用的android:targetSdkVersion数值为17+)JS只能访问带有 @JavascriptInterface注解的Java函数。因此如果你的开发版本比较高,需要在被调用的函数前加上@JavascriptInterface注解,如下:
private final class AndroidJSI {
@JavascriptInterface
public void login() {
if (!DataManager.isLogined()) {
IntentUtil.gotoActivity(getContext(), LoginActivity.class);
}
}
}