Android与Javascript交互示例(三)

简介: MainAcivity如下: package cn.testjavascriptdialog;import android.os.Bundle;import android.

MainAcivity如下:

package cn.testjavascriptdialog;
import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.view.LayoutInflater;
import android.view.View;
import android.webkit.JsPromptResult;
import android.webkit.JsResult;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.widget.EditText;
/**
 * Demo描述:
 * 测试Android响应Javascript的三种对话框
 * 
 * 参考资料:
 * http://www.cnblogs.com/luckjun/archive/2013/03/22/2976117.html
 */
public class MainActivity extends Activity {
	 private WebView mWebView;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		init();
	}

	private void init(){
		mWebView=(WebView) findViewById(R.id.webView);
		initWebViewSettings();
		// 为WebView设置WebChromeClient
		mWebView.setWebChromeClient(new WebChromeClientSubClass());
		//加载本地Html文件
		mWebView.loadUrl("file:///android_asset/test.html");
	}
	private void initWebViewSettings(){
		mWebView.setVerticalScrollBarEnabled(false);
		mWebView.setHorizontalScrollBarEnabled(false);
		mWebView.getSettings().setJavaScriptEnabled(true);
		mWebView.getSettings().setSupportZoom(true);
		mWebView.getSettings().setDomStorageEnabled(true);
		mWebView.getSettings().setPluginsEnabled(true);
		mWebView.requestFocus();
		mWebView.getSettings().setUseWideViewPort(true);
		mWebView.getSettings().setLoadWithOverviewMode(true);
		mWebView.getSettings().setSupportZoom(true);
		mWebView.getSettings().setBuiltInZoomControls(true);
	}

	private class WebChromeClientSubClass extends WebChromeClient{
		@Override
		public boolean onJsAlert(WebView view, String url, String message,final JsResult result) {
			Dialog alertDialog=null;
			AlertDialog.Builder builder=new Builder(MainActivity.this);
			builder.setTitle("Javascript的alert对话框");
			builder.setMessage(message);
			builder.setNegativeButton("OK", new OnClickListener() {
				@Override
				public void onClick(DialogInterface arg0, int arg1) {
					System.out.println("现在显示的是Javascript的alert对话框");
					//注意:
					//必须要这一句代码:result.confirm()表示:
					//处理结果为确定状态同时唤醒WebCore线程 
					//否则不能继续点击按钮
					result.confirm();
				}
			});
			alertDialog=builder.create();
			alertDialog.show();
			return true;
		}
		@Override
		public boolean onJsConfirm(WebView view, String url, String message,final JsResult result) {
			Dialog confirmDialog=null;
			AlertDialog.Builder builder=new Builder(MainActivity.this);
			builder.setTitle("Javascript的confirm对话框");
			builder.setMessage(message);
			builder.setPositiveButton("OK", new OnClickListener() {
				@Override
				public void onClick(DialogInterface arg0, int arg1) {
					System.out.println("现在点击的是Javascript的confirm对话框的OK");
					//处理结果为确定状态同时唤醒WebCore线程 
					result.confirm();
				}
			});
			builder.setNegativeButton("NO", new OnClickListener() {
				@Override
				public void onClick(DialogInterface arg0, int arg1) {
					System.out.println("现在点击的是Javascript的confirm对话框的NO");
					//处理结果为取消状态同时唤醒WebCore线程 
					result.cancel();
				}
			});
			confirmDialog=builder.create();
			confirmDialog.show();
			return true;
		}
		@Override
		public boolean onJsPrompt(WebView view, String url, String message,String defaultValue, final JsPromptResult result) {
			 LayoutInflater inflater = getLayoutInflater(); 
             View promptView = inflater.inflate(R.layout.prompt, null); 
             final EditText nameEditText = (EditText) promptView.findViewById(R.id.nameEditText); 
             nameEditText.setHint("请输入您的名字"); 
               
            Dialog promptDialog=null;
 			AlertDialog.Builder builder=new Builder(MainActivity.this);
 			builder.setView(promptView);
 			builder.setTitle("Javascript的prompt对话框");
 			builder.setPositiveButton("OK", new OnClickListener() {
 				@Override
 				public void onClick(DialogInterface arg0, int arg1) {
 					System.out.println("现在点击的是Javascript的prompt对话框的OK");
 					//处理结果为取消状态且唤醒WebCore线程 
 					//同时弹出alert对话框提示用户
 					result.confirm(nameEditText.getText().toString());
 				}
 			});
 			builder.setNegativeButton("NO", new OnClickListener() {
 				@Override
 				public void onClick(DialogInterface arg0, int arg1) {
 					System.out.println("现在点击的是Javascript的prompt对话框的NO");
 					//处理结果为取消状态同时唤醒WebCore线程 
 					result.cancel();
 				}
 			});
 			promptDialog=builder.create();
 			promptDialog.show();
            return true; 
		}
	}
}


main.xml如下:

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="测试Android响应Javascript的三种对话框"
        android:layout_centerHorizontal="true"
     />
    <WebView 
        android:id="@+id/webView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_below="@id/textView"
        />

</RelativeLayout>

 

prompt.xml如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >

    <EditText
        android:id="@+id/nameEditText"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
     />

</LinearLayout>


test.html如下:

        <html> 
    <head> 
        <script type="text/javascript"> 
            function doAlert() { 
                alert("hello!"); 
            } 
       
            function doConfirm() { 
                confirm("are you sure?"); 
            } 
       
            function doPrompt() { 
                var val = prompt("what's your name?"); 
                if (val) { 
                    alert("your name is:" + val); 
                } 
            } 
       
           
       
            function success(msg) { 
                alert(msg); 
            } 
        </script> 
    </head> 
    <body background="black"> 
        <br>
        <br>
        <input type="button" value="alert" onclick="doAlert()"/><br/> 
        <br>
        <br>
        <input type="button" value="confirm" onclick="doConfirm()"/><br/> 
        <br>
        <br>
        <input type="button" value="prompt" onclick="doPrompt()"/><br/> 
        <br>
        <br>
        
        <div id="result"></div> 
    </body> 
</html> 


 

相关文章
|
10月前
|
前端开发 JavaScript API
js实现promise常用场景使用示例
本文介绍JavaScript中Promise的6种常用场景:异步请求、定时器封装、并行执行、竞速操作、任务队列及与async/await结合使用,通过实用示例展示如何优雅处理异步逻辑,避免回调地狱,提升代码可读性与维护性。
450 10
|
Java Linux Android开发
移动应用开发与操作系统的交互:深入理解Android和iOS
在数字时代,移动应用成为我们日常生活的一部分。本文将深入探讨移动应用开发的核心概念、移动操作系统的工作原理以及它们如何相互作用。我们将通过实际代码示例,展示如何在Android和iOS平台上创建一个简单的“Hello World”应用,并解释其背后的技术原理。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和知识。
|
数据采集 JavaScript Android开发
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
736 7
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
数据采集 人工智能 自然语言处理
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告
Midscene.js 是一款基于 AI 技术的 UI 自动化测试框架,通过自然语言交互简化测试流程,支持动作执行、数据查询和页面断言,提供可视化报告,适用于多种应用场景。
4533 1
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告
|
存储 JavaScript 前端开发
【JavaScript】网页交互的灵魂舞者
本文介绍了 JavaScript 的三种引入方式(行内、内部、外部)和基础语法,包括变量、数据类型、运算符、数组、函数和对象等内容。同时,文章还详细讲解了 jQuery 的基本语法和常用方法,如 `text()`、`html()`、`val()`、`attr()` 和 `css()` 等,以及如何插入和删除元素。通过示例代码和图解,帮助读者更好地理解和应用这些知识。
276 1
【JavaScript】网页交互的灵魂舞者
|
缓存 JavaScript 前端开发
JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用
本文深入讲解了 JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用。
1180 5
|
JSON 前端开发 JavaScript
聊聊 Go 语言中的 JSON 序列化与 js 前端交互类型失真问题
在Web开发中,后端与前端的数据交换常使用JSON格式,但JavaScript的数字类型仅能安全处理-2^53到2^53间的整数,超出此范围会导致精度丢失。本文通过Go语言的`encoding/json`包,介绍如何通过将大整数以字符串形式序列化和反序列化,有效解决这一问题,确保前后端数据交换的准确性。
574 4
|
设计模式 前端开发 JavaScript
揭秘!前端大牛们如何巧妙利用JavaScript,打造智能交互体验!
【10月更文挑战第30天】前端开发领域充满了无限可能与创意,JavaScript作为核心语言,凭借强大的功能和灵活性,成为打造智能交互体验的重要工具。本文介绍前端大牛如何利用JavaScript实现平滑滚动、复杂动画、实时数据更新和智能表单验证等效果,展示了JavaScript的多样性和强大能力。
469 4
|
存储 前端开发 测试技术
Android kotlin MVVM 架构简单示例入门
Android kotlin MVVM 架构简单示例入门
643 1
|
前端开发 JavaScript 开发者
Express.js与前端框架的集成:React、Vue和Angular的示例与技巧
本文介绍了如何将简洁灵活的Node.js后端框架Express.js与三大流行前端框架——React、Vue及Angular进行集成,以提升开发效率与代码可维护性。文中提供了详细的示例代码和实用技巧,展示了如何利用Express.js处理路由和静态文件服务,同时在React、Vue和Angular中构建用户界面,帮助开发者快速掌握前后端分离的开发方法,实现高效、灵活的Web应用构建。
700 3