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);
          }
      }
  }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容