Android调用JS代码,如何实现交互与通信?

在Android中调用JavaScript代码,可以通过WebView组件的evaluateJavascript方法来实现。“java,webView.evaluateJavascript("javascript:yourFunction()", null);,

1、Android调用JS代码的方式

android 调js 代码

通过WebView的loadUrl()方法

步骤:首先将需要调用的JS代码以.html格式放到src/main/assets文件夹里(也可以是远程URL),在Android代码中,先初始化WebView并启用JavaScript支持,然后使用loadUrl()方法加载JS代码对应的URL。

布局文件中添加WebView控件:<WebView android:id="@+id/webview" android:layout_width="match_parent" android:layout_height="match_parent"/>

Java代码中初始化和加载:

           WebView webView = findViewById(R.id.webview);
           WebSettings webSettings = webView.getSettings();
           webSettings.setJavaScriptEnabled(true);
           webView.loadUrl("file:///android_asset/javascript.html");

在JS代码中定义要调用的方法,如function callJS(){alert("Android调用了JS的callJS方法");}

在Android中通过按钮点击事件等触发调用JS方法,使用webView.loadUrl("javascript:callJS()");

通过WebView的evaluateJavascript()方法

步骤:同样先初始化WebView并启用JavaScript支持,然后使用evaluateJavascript()方法直接执行JS代码字符串,该方法是异步执行的,需要传入一个ValueCallback<String>接口来处理返回值(如果有)。

初始化WebView:

android 调js 代码

           WebView webView = findViewById(R.id.webview);
           WebSettings webSettings = webView.getSettings();
           webSettings.setJavaScriptEnabled(true);

调用JS方法:

           webView.evaluateJavascript("showAlert('Hello from Android')", new ValueCallback<String>() {
               @Override
               public void onReceiveValue(String value) {
                   //处理返回值,此处为空实现
               }
           });

在JS中定义showAlert方法:function showAlert(message){alert(message);}

2、JS调用Android代码的方式

通过WebView的addJavascriptInterface()方法

步骤:先定义一个Java类作为JavaScript接口,在该类中定义一些供JS调用的方法,并使用@JavascriptInterface注解,然后将该接口实例添加到WebView中,在JS中就可以通过指定的对象名调用这些方法。

定义接口类:

           public class WebAppInterface {
               Context mContext;
               WebAppInterface(Context context){
                   mContext = context;
               }
               @JavascriptInterface
               public void showToast(String toast){
                   Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
               }
           }

添加接口到WebView:

           webView.addJavascriptInterface(new WebAppInterface(this), "Android");

在JS中调用:function callAndroid(){Android.showToast("Hello from JavaScript");}

通过WebViewClient的shouldOverrideUrlLoading()方法回调拦截url:在WebViewClient中重写shouldOverrideUrlLoading()方法,当JS尝试通过window.location等方式改变URL时会回调该方法,可以在其中进行拦截和处理。

android 调js 代码

通过WebChromeClient的onJsAlert()、onJsConfirm()、onJsPrompt()方法回调拦截JS对话框alert()、confirm()、prompt()消息:在WebChromeClient中重写这些方法,可以拦截JS中的相应对话框消息并进行自定义处理。

3、单元表格归纳

方式 Android调用JS JS调用Android
方法 loadUrl()、evaluateJavascript() addJavascriptInterface()、shouldOverrideUrlLoading()、onJsAlert()等
示例 webView.loadUrl(“javascript:callJS()”);
webView.evaluateJavascript(“showAlert(‘Hello from Android’)”, new ValueCallback(){…});
webView.addJavascriptInterface(new WebAppInterface(this), “Android”);
webView.setWebViewClient(new WebViewClient(){@Override public boolean shouldOverrideUrlLoading(WebView view, String url){…}});
适用场景 需要在Android中触发JS代码执行,获取JS函数的返回值等 需要在JS中调用Android的功能,如显示Toast等

4、相关问题与解答

问题1:如何在Android中调用JS代码并传递参数?

解答:如果是通过loadUrl()方法调用,可以在JS方法的参数中直接拼接参数值,例如webView.loadUrl("javascript:callJSWithParam('paramValue')");,如果是通过evaluateJavascript()方法调用,可以直接在JS代码字符串中拼接参数,如webView.evaluateJavascript("showAlert('Hello from Android, param: ' + paramValue)", new ValueCallback<String>(){...});

问题2:JS调用Android代码时,如何确保安全性?

解答:在使用addJavascriptInterface()方法时,要注意限制接口方法的访问范围,避免暴露敏感的Android功能,可以使用@JavascriptInterface注解,并在Java代码中对接口方法进行合理的权限控制和安全检查,对于来自不可信源的JS代码,要谨慎处理,避免执行恶意操作。

原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1617224.html

本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。

(0)
未希
上一篇 2025-03-07 02:39
下一篇 2024-03-22 02:38

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

产品购买 QQ咨询 微信咨询 SEO优化
分享本页
返回顶部
云产品限时秒杀。精选云产品高防服务器,20M大带宽限量抢购 >>点击进入