AndroidJS互相调用的实现方式及原理是什么?
- 行业动态
- 2025-03-07
- 2
WebView
的
addJavascriptInterface
方法添加接口,并在 JavaScript 中使用该接口调用 Java 代码;Java 端可通过
evaluateJavascript
方法执行 JavaScript 代码。
Android与JS互相调用的详细方法
一、Android调用JavaScript
1、加载本地HTML文件:在app根目录新建一个assets文件夹,并在文件夹内新建一个本地html文件,编写一个简单的html文件show.html
。
2、启用JavaScript支持:在Android代码中,获取WebView组件的实例,并启用JavaScript支持。
WebView webView = findViewById(R.id.webview); WebSettings settings = webView.getSettings(); settings.setJavaScriptEnabled(true); webView.loadUrl("file:///android_asset/show.html");
3、定义按钮点击事件:在Android布局文件中添加一个按钮,并设置其点击事件。
<Button android:id="@+id/btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="调用js方法" />
4、实现按钮点击逻辑:在Android代码中,为按钮设置点击事件,当按钮被点击时,调用JavaScript方法。
Button btn = findViewById(R.id.btn); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { testJS(); } });
其中testJS
方法用于调用JavaScript方法:
@SuppressLint("SetJavaScriptEnabled") public void testJS() { webView.loadUrl("javascript:test()"); }
二、JavaScript调用Android
1、定义被调用的方法:在activity中定义一个被JavaScript调用的方法,并使用@JavascriptInterface
注解。
@JavascriptInterface public void hello(String msg) { Toast.makeText(this, msg, Toast.LENGTH_SHORT).show(); }
2、绑定Java对象:将Java对象绑定到WebView上,以便JavaScript能够调用它。
webView.addJavascriptInterface(this, "justTest");
3、在JavaScript中调用:在JavaScript代码中,通过绑定的对象名和方法名来调用Java方法。
<button onclick="justTest.hello('js调用安卓方法!')">调用安卓方法</button>
三、单元表格
步骤 | Android调用JS | JavaScript调用Android |
1 | 加载本地HTML文件 | 定义被调用的方法 |
2 | 启用JavaScript支持 | 绑定Java对象 |
3 | 定义按钮点击事件 | 在JavaScript中调用 |
4 | 实现按钮点击逻辑 |
四、相关问题与解答
1、问:如何在Android中调用JavaScript的有参无返回值函数?
答:在Android代码中,可以使用webView.loadUrl("javascript:functionName(arg1, arg2, ...)")
的方式调用JavaScript的有参无返回值函数,如果JavaScript中有一个名为alertMessage
的函数,需要传递一个字符串参数,可以这样调用:webView.loadUrl("javascript:alertMessage('Hello, World!')")
。
2、问:如何在JavaScript中调用Android的有参方法?
答:在JavaScript中调用Android的有参方法时,需要按照window.android.methodName(arg1, arg2, ...)
的格式进行调用,如果Android中有一个名为sum
的方法,需要传递两个整数参数,可以这样调用:window.android.sum(1, 2)
,需要注意的是,这里的android
是绑定到WebView上的Java对象的别名,需要在Java代码中使用webView.addJavascriptInterface(this, "android")
进行绑定。