WebView与JS交互代码没有被调用问题

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);
          }
      }
  }

你可能感兴趣的:(WebView与JS交互代码没有被调用问题)