美文网首页孚睿科技·ANDROID知识总结
WebView与JS交互代码没有被调用问题

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

作者: 安卓小生 | 来源:发表于2016-09-12 18:31 被阅读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);
              }
          }
      }
    

    相关文章

      网友评论

        本文标题:WebView与JS交互代码没有被调用问题

        本文链接:https://www.haomeiwen.com/subject/rygpettx.html