JavaScript调用Android接口常见的3种方式

 更新时间:2025年05月28日 10:27:58   作者:遥不可及zzz  
这篇文章主要介绍了JavaScript调用Android接口常见的3种方式,分别是通过addJavascriptInterface注入Java对象、拦截WebChromeClient实现双向通信、拦截URLScheme支持单向调用,需要的朋友可以参考下

前言

在 Android 开发中,JavaScript(JS)调用原生 Android 接口主要通过 WebView 组件实现。以下是常见的 3 种核心方式及具体实现逻辑:

1. addJavascriptInterface 注入接口​​

​原理​​:通过 WebView 向 JS 暴露一个 Java 对象,JS 可直接调用该对象中被 @JavascriptInterface 注解标记的方法

​步骤​​:

  • ​定义接口类​​:
    public class WebAppInterface {
        Context mContext;
        WebAppInterface(Context c) { mContext = c; }
    
        @JavascriptInterface
        public void showToast(String msg) {
            Toast.makeText(mContext, msg, Toast.LENGTH_SHORT).show();
        }
    }
  • ​注入接口到 WebView​​:
    webView.getSettings().setJavaScriptEnabled(true);
    webView.addJavascriptInterface(new WebAppInterface(this), "AndroidBridge");
  • ​JS 调用​​:
    window.AndroidBridge.showToast("Hello from JS!");

​注意事项​​:

  • ​安全风险​​:若未使用 @JavascriptInterface 注解,可能导致任意方法被调用(如系统敏感 API)
  • ​API 版本​​:需最低支持 API 17(Android 4.2)

​​2. 拦截 WebChromeClient 对话框​​

​原理​​:通过重写 WebChromeClient 的对话框回调方法(如 onJsPrompt),解析 JS 发送的指令

​步骤​​:

  • ​自定义 WebChromeClient​​:
    webView.setWebChromeClient(new WebChromeClient() {
        @Override
        public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result) {
            if (message.startsWith("native:")) { // 协议约定
                handleNativeCall(message); // 解析并执行原生逻辑
                result.confirm("success"); // 返回结果给 JS
                return true;
            }
            return super.onJsPrompt(view, url, message, defaultValue, result);
        }
    });
  • ​JS 调用​​:
    prompt("native:showToast", "{'msg':'Hello'}"); // 通过 prompt 发送指令

​适用场景​​:

  • 需要双向通信(JS 可获取原生返回值);
  • 兼容低版本 Android(无需依赖 @JavascriptInterface

​​3. 拦截 URL Scheme​​

​原理​​:JS 触发特定格式的 URL 请求(如 myapp://action?params),Android 通过 shouldOverrideUrlLoading 拦截并处理

​步骤​​:

  • ​自定义 WebViewClient​​:
    webView.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            if (url.startsWith("myapp://")) { // 协议约定
                parseUrl(url); // 解析 URL 并执行对应逻辑
                return true; // 阻止默认加载
            }
            return super.shouldOverrideUrlLoading(view, url);
        }
    });
  • ​JS 调用​​:
    window.location.href = "myapp://showToast?msg=Hello"; // 或通过 iframe 触发

​优缺点​​:

  • ​优点​​:兼容性最好(支持所有 Android 版本);
  • ​缺点​​:仅支持单向调用(JS 无法直接获取原生返回值)

​​安全建议​​

  • ​输入校验​​:对 JS 传递的参数进行严格校验,防止注入攻击
  • ​最小权限原则​​:仅暴露必要的接口方法,避免敏感操作(如文件读写)
  • ​HTTPS 加密​​:加载远程页面时使用 HTTPS,避免中间人攻击

总结 

到此这篇关于JavaScript调用Android接口常见的3种方式的文章就介绍到这了,更多相关JS调用Android接口内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 教你如何搭建android源代码repo仓库

    教你如何搭建android源代码repo仓库

    这篇文章主要介绍了如何搭建android源代码repo仓库,如果你的开发是基于AOSP源码来建仓,那么搭建repo服务器和部署自己的repo仓库就是非常必要的工作了,本文给大家详细介绍搭建过程,感兴趣的朋友一起看看吧
    2022-07-07
  • Android实现跳动的小球加载动画效果

    Android实现跳动的小球加载动画效果

    Android中有各式各样的加载动画,大家多多少少都见过,比如用过美团客户端的用户对美团那个加载小人的动画印象很深刻,一个可爱的小人在那拼命的跑。这样的动画实现其实还有很多,今天这里就来实现一个跳动的小球效果。有需要的可以参考借鉴。
    2016-08-08
  • Android编程之防止反编译的实现方法

    Android编程之防止反编译的实现方法

    这篇文章主要介绍了Android编程之防止反编译的实现方法,涉及Android针对运行环境、签名及程序相关信息的获取与判定技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-11-11
  • Android实现九格智能拼图算法

    Android实现九格智能拼图算法

    这篇文章主要为大家详细介绍了Android实现九格智能拼图算法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • android读取assets文件示例

    android读取assets文件示例

    这篇文章主要介绍了android读取assets文件示例,需要的朋友可以参考下
    2014-02-02
  • Android实现沉浸式状态栏功能

    Android实现沉浸式状态栏功能

    这篇文章主要为大家详细介绍了Android实现沉浸式状态栏功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-10-10
  • Android xml实现animation的4种动画效果实例代码

    Android xml实现animation的4种动画效果实例代码

    在Android应用程序,使用动画效果,能带给用户更好的感觉,做动画可以通过XML或Android代码来实现。本文给大家介绍Android xml实现animation的4种动画效果实例代码,一起看看吧
    2016-05-05
  • Android仿京东淘宝自动无限循环轮播控件思路详解

    Android仿京东淘宝自动无限循环轮播控件思路详解

    在App的开发中,很多的时候都需要实现类似京东淘宝一样的自动无限轮播的广告栏,这里小编写了一个,分享到脚本之家平台供大家参考
    2017-04-04
  • 浅谈Android开发Webview的Loading使用效果

    浅谈Android开发Webview的Loading使用效果

    这篇文章主要为大家介绍了浅谈Android开发Webview的Loading使用效果详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • Android后台定时提醒功能实现

    Android后台定时提醒功能实现

    这篇文章主要介绍了Android后台定时提醒功能,针对Service,AlarmManager的使用进行详细阐述,感兴趣的小伙伴们可以参考一下
    2016-01-01

最新评论