首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

android与js交互实例

Android 与 JavaScript 的交互通常在混合应用开发中出现,比如使用 WebView 来加载网页内容,并且需要在网页和 Android 应用之间进行数据交换。以下是一个简单的实例,展示了如何在 Android 应用中使用 WebView 与 JavaScript 进行交互。

基础概念

WebView: Android 中的一个组件,用于在应用内显示网页。

JavaScriptInterface: Android 提供的一个类,用于在 WebView 中注入 Java 对象,使得 JavaScript 可以调用 Java 方法。

优势

  1. 用户体验: 可以复用现有的网页内容,快速迭代更新。
  2. 开发效率: 前后端分离,各自独立开发和维护。
  3. 跨平台: 一套代码可以在多个平台上运行。

类型

  1. 单向交互: Android 调用 JavaScript。
  2. 双向交互: Android 和 JavaScript 相互调用。

应用场景

  • 混合应用开发: 结合原生应用和网页的优势。
  • 动态内容加载: 根据用户操作动态更新网页内容。
  • 表单验证: 在客户端进行初步的数据验证。

示例代码

以下是一个简单的 Android 与 JavaScript 交互的示例:

Android 端代码

代码语言:txt
复制
import android.os.Bundle;
import android.webkit.JavascriptInterface;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

    private WebView webView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

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

        // 添加 JavaScript 接口
        webView.addJavascriptInterface(new WebAppInterface(this), "Android");

        // 加载本地 HTML 文件
        webView.loadUrl("file:///android_asset/index.html");
        webView.setWebViewClient(new WebViewClient());
    }

    public class WebAppInterface {
        Context mContext;

        /** Instantiate the interface and set the context */
        WebAppInterface(Context c) {
            mContext = c;
        }

        /** Show a toast from the web page */
        @JavascriptInterface
        public void showToast(String toast) {
            Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
        }
    }
}

HTML 端代码 (index.html)

代码语言:txt
复制
<!DOCTYPE html>
<html>
<head>
    <title>Android & JS Interaction</title>
    <script type="text/javascript">
        function showAndroidToast(toast) {
            Android.showToast(toast);
        }
    </script>
</head>
<body>
    <input type="button" value="Say hello" onClick="showAndroidToast('Hello Android!')" />
</body>
</html>

解决常见问题

问题: JavaScript 调用 Android 方法时没有响应。

原因: 可能是没有启用 JavaScript 支持,或者 JavaScript 接口没有正确添加。

解决方法: 确保 WebSettings 中的 setJavaScriptEnabled(true) 被调用,并且 addJavascriptInterface 方法正确添加了接口。

问题: 安全性问题,JavaScript 可以访问敏感数据。

原因: 默认情况下,JavaScript 可以通过注入的接口访问所有 Java 对象。

解决方法: 使用 @JavascriptInterface 注解明确指定哪些方法可以被 JavaScript 访问,并且避免在这些方法中处理敏感数据。

通过以上示例和解决方案,你应该能够在 Android 应用中实现基本的 JavaScript 交互功能。如果遇到更复杂的问题,可能需要进一步调试和优化代码。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • Android中极简的js与java的交互库-SimpleJavaJsBridge

    作者:牛晓伟 地址:http://www.jianshu.com/p/de6331c9958f 声明:本文是牛晓伟原创,已获其授权发布,未经原作者允许请勿转载 前言 最近接触android中js与java...交互的东西很多,当然它们之间的交互方式有几种,但是我觉得这几种交互方式都存在一定的不足,这是我决定编写SimpleJavaJsBridge这个库的关键原因。...我会按以下顺序进行本文章: 1、现有js与java通信方案及不足 2、js与java完美通信方案设计 3、SimpleJavaJsBridge 现在进入正题 现有js与java通信方案及不足 先来说明一点...js与java完美通信方案设计 1. 一套完美的js与java的通信方案应满足以下几点: js与java知道对方的细节越少越好,越少它们的耦合性越低。那到底多少为好呢?...); } //使用,使用方式和Retrofit一样,先使用SimpleJavaJsBridge的 //createInvokJSCommand实例方法生成一个IInvokeJS实例

    1.7K30

    Java与js的交互

    在android的开发过程中,有很多时候需要用到本地java代码和javascript进行交互。...android对交互进行了很好的封装,在开发中我们可以很简单的用java代码调用webview中的js,也可以用webview中的js来调用本地的java代码,这样我们可以实现很多原来做不了的功能,比如点击网页上的电话号码后...废话不多说,这次教程的目标如下 android 中的java代码调用webview里面的js脚本 webview中的js脚本调用本地的java代码 java调用js并传递参数 js调用java并传递参数...脚本就可以通过我们给的这个别名来调用我们的方法,在上面的代码中,this是实例化的对象,wst是这个对象在js中的别名 功能三 java代码调用js并传递参数 只需要在待用js函数的时候加入参数即可...这里是实例的html代码,从assert中加载,原来做项目的时候,从assert中加载的中文网页会出现乱码,解决办法就是给html指定编码。

    5K90

    UIWebView与JS的交互

    Github上的WebViewJavascriptBridge 这个用于UIWebView/WebViews和JS交互的封装库。 看sample的时候我容易被各种回调搞晕,我们先看代码。...中,交互的方式只有两种:send 和 callHandle,JS和OC都有这两个方法,所以对应的四种关系是: ?...这个例子展现了一个完整的过程,基本涉及了JS和OC的各种交互包括OC调用JS、JS调用OC等。如果你有其它的业务需求,也基本按照这个流程就可以依样画葫芦了,唯一不同的也就是业务逻辑了。...选择控制台,你就可以看到久违的调试窗口以及JS的console.log了。 ? 以上就是使用 WebViewJavascriptBridge 进行UIWebView与JS的深度交互的例子。...Node.JS都可以写服务器了,React Native都可以开发iOS了。学无止境,iOS应该先搞定OC和Swift再去搞前端。 参考:UIWebView与JS的深度交互

    3.7K20

    iOS与JS的交互

    iOS和JS的交互看似两个问题,其实要解决的问题只有一个,那就是JS如何调用native方法。...h5协调,双方需要统一监听的字段 3.参数问题:如果此时的交互需要传递参数,参数也可以放在链接里,同样通过识别字符串的方法来获取 */ //第二步:拿到链接字符串的后续部分...deleteRange]; NSArray *params = [linkmStr componentsSeparatedByString:@"&&"]; //取出第一个参数:与h5...,JS可以直接用oc方法名来调用oc方法,这样就类似于安卓的addJavaScriptInterface方法,在使用此方法时仍然要导入JavaScriptCore //第一步:创建一个用与JS交互的类JSHandler...继承与NSObject //在类中声明一个遵守JSExport的协议,并且使JSHandler实现这个新的协议 @protocolJSHandlerProtocol //单参数方法

    4.1K70

    Unity与Android调用交互

    AS 和 Unity 之间的通信 第一部分 Android Studio需要做的工作 1.创建正常 Android Studio 库工程 首先创建一个Android Studio 项目 然后修改创建好的应用为库编译模式需要修改的点如下...; import android.util.Log; import android.widget.Toast; import android.os.Bundle; import com.unity3d.player.UnityPlayer...receiveObj(自定定义)", “UnityMethod(自已定义)”, “This is args a=”+a+" str="+str(自己的参数)); 3.给Image或者Button 挂载C# 脚本与AS...交互 挂在详情我就不写了,这个比较简单直接拖动就可以了 using System.Collections; using System.Collections.Generic; using UnityEngine...中的方法 UnityCallAndroid, //将其方法绑定在Unity中的Button或者Image上,点击Button和Image就实现交互了 public void OnBtnClickHandler

    1.2K50

    Android 集成 Flutter | 与交互

    这篇文章将以如何在 Android 项目中集成 Flutter 和 如何在两者之间进行交互为主要内容。...在 Android 项目中集成 Flutter 项目 首先我们需要找一个 android 项目,以这个为基础来集成 Fluuter。...效果如下 Flutter 和 Android 的交互 Android 调起 Flutter 页面 在上面的代码中已经有打开 flutter 页面的代码了,如下所示: startActivity(FlutterActivity.createDefaultIntent...从指定的入口点运行 FlutterFragment 与不同的初始路由类似,不同的flutterfragment可能希望执行不同的Dart入口点。...flutterEngine.dartExecutor, "com.example.AndroidWithFlutter/native") 复制代码 上面代码中定义了一个 MtthodChannel ,第一个参数是一个接口,是与

    2K20
    领券