Android WebView Java与Js通信

简介: 1.Activity 中 事件修改 webview中内容 2.webview中事件修改activity中的内容 3.webview中的事件,响应js函数 主要代码实现:  @SuppressLint("JavascriptInterface") public class MainActivity extends Activity { private static


1.Activity 中 事件修改 webview中内容

2.webview中事件修改activity中的内容

3.webview中的事件,响应js函数


主要代码实现: 

@SuppressLint("JavascriptInterface") public class MainActivity extends Activity {

    private static final String TAG="LocalBrowser";
    private final Handler handler=new Handler();
    private WebView webView;
    private TextView textView;
    private Button button;
    
    private class AndroidBridge //这个类中提供各种js可调用的方法。
    {
        public void callAndroid(final String arg)
        {
            handler.post(new Runnable(){
                public void run()
                {
                    Log.d(TAG,"calAndroid("+arg+")");
                    textView.setText(arg);
                }
            });
        }
    }
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        webView=(WebView)findViewById(R.id.web_view);
        textView=(TextView)findViewById(R.id.text_view);
        button=(Button)findViewById(R.id.button);
        
        webView.getSettings().setJavaScriptEnabled(true);
        webView.addJavascriptInterface(new AndroidBridge(), "android"); //将那个实例化的函数类设置为”android"的js接口。
        //主要处理解析,渲染网页等浏览器做的事情
        webView.setWebChromeClient(new WebChromeClient()
        {
            //(WebView上alert是弹不出来东西的,需要定制你的WebChromeClient处理弹出) 
            @Override
            public boolean onJsAlert(WebView view, String url, String message,
                    JsResult result) {
                
                Log.d(TAG,"onJsAlert("+view+","+url+","+message+","+result+")");
                Toast.makeText(MainActivity.this, message, 3000).show();
                result.confirm();
                return true;
            }
            
        });//设置可以被java截获的js事件。

        //通过这里切换 assets 中的 html文件 
        webView.loadUrl("file:///android_asset/index.html");
        button.setOnClickListener(new OnClickListener() {
            
            public void onClick(View v) {
                Log.d(TAG,"onClick("+v+")");
                webView.loadUrl("javascript:callJS('hello from android')");  //java调用js的函数
            }
        });
    }
    
}


js html1文件   

<!DOCTYPE html>
<html>

	<head>
		<meta charset="utf-8">
		<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
		<title>hello world</title>
		<script type="text/javascript">
			function helloworld() {
				alert("hello world!")
			}
			
		</script>
	</head>

	<body>
		This is a show “helloworld” default page,your can click this button
		<button onclick="helloworld()">click me!</button> to show a "hello world" message!
	</body>

</html>


项目源码地址:http://download.csdn.net/detail/flyingsir_zw/9490172



目录
相关文章
|
1月前
|
开发框架 前端开发 Android开发
Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势
本文深入探讨了 Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势。这对于实现高效的跨平台移动应用开发具有重要指导意义。
161 4
|
2月前
|
缓存 JavaScript 前端开发
Java 如何确保 JS 不被缓存
【10月更文挑战第19天】在 Java 中,可以通过设置 HTTP 响应头来确保 JavaScript 文件不被浏览器缓存。方法包括:1. 使用 Servlet 设置响应头,通过 `doGet` 方法设置 `Expires`、`Cache-Control` 和 `Pragma` 头;2. 在 Spring Boot 中配置拦截器,通过 `NoCacheInterceptor` 类和 `WebConfig` 配置类实现相同功能。这两种方法都能确保每次请求都能获取到最新的 JavaScript 内容。
|
1月前
|
开发框架 JavaScript 前端开发
HarmonyOS UI开发:掌握ArkUI(包括Java UI和JS UI)进行界面开发
【10月更文挑战第22天】随着科技发展,操作系统呈现多元化趋势。华为推出的HarmonyOS以其全场景、多设备特性备受关注。本文介绍HarmonyOS的UI开发框架ArkUI,探讨Java UI和JS UI两种开发方式。Java UI适合复杂界面开发,性能较高;JS UI适合快速开发简单界面,跨平台性好。掌握ArkUI可高效打造符合用户需求的界面。
116 8
|
2月前
|
程序员 开发工具 Android开发
Android|WebView 禁止长按,限制非白名单域名的跳转层级
如何限制 WebView 仅域名白名单网址能随意跳转,并禁用长按选择文字。
44 2
|
2月前
|
缓存 JavaScript 前端开发
Java 如何确保 JS 不被缓存
大家好,我是 V 哥。本文探讨了 Java 后端确保 JavaScript 不被缓存的问题,分析了文件更新后无法生效、前后端不一致、影响调试与开发及安全问题等场景,并提供了使用版本号、设置 HTTP 响应头、配置静态资源缓存策略和使用 ETag 等解决方案。最后讨论了缓存的合理使用及其平衡方法。
105 0
|
3月前
|
Java Android开发 C++
🚀Android NDK开发实战!Java与C++混合编程,打造极致性能体验!📊
在Android应用开发中,追求卓越性能是不变的主题。本文介绍如何利用Android NDK(Native Development Kit)结合Java与C++进行混合编程,提升应用性能。从环境搭建到JNI接口设计,再到实战示例,全面展示NDK的优势与应用技巧,助你打造高性能应用。通过具体案例,如计算斐波那契数列,详细讲解Java与C++的协作流程,帮助开发者掌握NDK开发精髓,实现高效计算与硬件交互。
169 1
|
2月前
|
JavaScript Java
Java 控制台VUE.JS的使用
Java 控制台VUE.JS的使用
24 0
|
3月前
|
Java Android开发 数据安全/隐私保护
Android中多进程通信有几种方式?需要注意哪些问题?
本文介绍了Android中的多进程通信(IPC),探讨了IPC的重要性及其实现方式,如Intent、Binder、AIDL等,并通过一个使用Binder机制的示例详细说明了其实现过程。
399 4
|
4月前
|
存储 搜索推荐 Java
探索安卓开发中的自定义视图:打造个性化UI组件Java中的异常处理:从基础到高级
【8月更文挑战第29天】在安卓应用的海洋中,一个独特的用户界面(UI)能让应用脱颖而出。自定义视图是实现这一目标的强大工具。本文将通过一个简单的自定义计数器视图示例,展示如何从零开始创建一个具有独特风格和功能的安卓UI组件,并讨论在此过程中涉及的设计原则、性能优化和兼容性问题。准备好让你的应用与众不同了吗?让我们开始吧!
|
4月前
|
Java 调度 Android开发
Android经典实战之Kotlin的delay函数和Java中的Thread.sleep有什么不同?
本文介绍了 Kotlin 中的 `delay` 函数与 Java 中 `Thread.sleep` 方法的区别。两者均可暂停代码执行,但 `delay` 适用于协程,非阻塞且高效;`Thread.sleep` 则阻塞当前线程。理解这些差异有助于提高程序效率与可读性。
87 1