当前位置: 代码网 > it编程>编程语言>Javascript > JavaScript调用Android接口常见的3种方式

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

2025年05月28日 Javascript 我要评论
前言在 android 开发中,javascript(js)调用原生 android 接口主要通过 webview 组件实现。以下是常见的 3 种核心方式及具体实现逻辑:1.addjavascript

前言

在 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接口内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com