`

WebView使用总结3(应用函数与JS函数互相调用)

阅读更多
完成java文件:
public class MethodMutual extends Activity {

	private WebView mWebView;
	private Handler mHandler = new Handler();
	private static final String LOG_TAG = "WebViewDemo";

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		loadAssetHtml();
	}

	public void loadAssetHtml() {
		mWebView = (WebView) findViewById(R.id.webview);
		WebSettings webSettings = mWebView.getSettings();
		webSettings.setSavePassword(false);
		webSettings.setSaveFormData(false);
		webSettings.setJavaScriptEnabled(true);
		webSettings.setSupportZoom(false);
		mWebView.setWebChromeClient(new MyWebChromeClient());
		// 将一个java对象绑定到一个javascript对象中,javascript对象名就是interfaceName,作用域是Global.
		mWebView.addJavascriptInterface(new DemoJavaScriptInterface(), "demo");
		mWebView.loadUrl("file:///android_asset/demo.html");
		// 通过应用中按钮点击触发JS函数响应
		Button mCallJS = (Button) findViewById(R.id.mCallJS);
		mCallJS.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				mWebView.loadUrl("javascript:wave()");
			}
		});
	}

	private int i = 0;

	final class DemoJavaScriptInterface {
		DemoJavaScriptInterface() {
		}
		/**
		 * This is not called on the UI thread. Post a runnable to invoke
		 * loadUrl on the UI thread.
		 */
		public void callAndroid() {
			mHandler.post(new Runnable() {
				public void run() {
					if (i % 2 == 0) {
						mWebView.loadUrl("javascript:wave()");
					} else {
						mWebView.loadUrl("javascript:waveBack()");
					}
					i++;
				}
			});
		}
	}

	/**
	 * Provides a hook for calling "alert" from javascript. Useful for debugging
	 * your javascript.
	 */
	final class MyWebChromeClient extends WebChromeClient {
		@Override
		public boolean onJsAlert(WebView view, String url, String message,
				JsResult result) {
			Log.d(LOG_TAG, message);
			result.confirm();
			return true;
		}
	}
}


main.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical" android:layout_width="fill_parent"
	android:layout_height="fill_parent">
	<Button android:layout_width="wrap_content" android:text="CallJs"
		android:layout_height="wrap_content" android:id="@+id/mCallJS" />
	<WebView android:id="@+id/webview" android:layout_width="fill_parent"
		android:layout_height="fill_parent" />
</LinearLayout>


demo.html:
<html>
	<script language="javascript">
	    /* This function is invoked by the activity */
		function wave() {
		    alert("1");
			document.getElementById("droid").src="android_waving.png";
			alert("2");
		}
		 /* This function is invoked by the activity */
		function waveBack() {
		    alert("1");
			document.getElementById("droid").src="android_normal.png";
			alert("2");
		}
	</script>
	<body>
	    <!-- Calls into the javascript interface for the activity -->
	    <a onClick="window.demo.callAndroid()"><div style="width:80px;
			margin:0px auto;
			padding:10px;
			text-align:center;
			border:2px solid #202020;" >
				<img id="droid" src="android_normal.png"/><br>
				Click me!
		</div></a>
	</body>
</html>


还有用到的2张机器人图片:





以防有些人懒得看代码,还是附上工程吧


  • 大小: 3.6 KB
  • 大小: 3.6 KB
分享到:
评论

相关推荐

    android中Webview与javascript的交互(互相调用)

    总之,Android中的WebView与JavaScript的交互是通过暴露Java对象和调用JavaScript函数实现的,这种方式极大地丰富了Android应用的功能。在实际开发中,我们需要合理利用这一特性,同时注意安全性和性能优化。

    WinForm下WebView2实现JS与C#交互Demo

    本示例“WinForm下WebView2实现JS与C#交互Demo”就展示了如何在C#中使用WebView2控件来实现JavaScript与C#之间的双向通信。 首先,确保已安装Microsoft Edge WebView2 SDK。可以通过NuGet包管理器安装`Microsoft....

    android webview中使用Java调用JavaScript方法并获取返回值

    总结一下,从Android WebView调用JavaScript方法并获取返回值的关键步骤包括: 1. 启用WebView组件的JavaScript支持。 2. 使用addJavascriptInterface()方法建立Java和JavaScript之间的通信桥梁。 3. 在Java类中...

    android之webview与js相互调用

    当需要在Android应用中调用JavaScript函数时,我们可以使用`WebView`类提供的`loadUrl()`方法。这个方法接受一个URL字符串,但也可以用来执行JavaScript代码。例如,假设我们有一个名为`myJsFunction`的JavaScript...

    Android下WebView中调用系统相机拍照范例

    `INTERNET`权限允许WebView加载网络资源,`CAMERA`权限允许应用使用设备的摄像头,而`WRITE_EXTERNAL_STORAGE`权限则是为了在SD卡上保存拍摄的照片。 接下来,我们要创建一个自定义的WebView类,扩展`WebViewClient...

    Android原生WebView与网页js相互调用

    本文将深入探讨如何在Android原生的WebView中与嵌入的JavaScript进行交互,使得两者可以相互调用方法,增强应用的功能和用户体验。 一、WebView基本使用 首先,我们需要在布局XML文件中添加WebView组件,并在Java...

    android demo,webview_js(webview的js方法调用java方法)。

    本示例“android demo,webview_js”着重展示了如何通过Webview实现JavaScript调用Java方法的功能。这个功能对于创建混合式应用或者在原生应用中嵌入HTML5页面尤其有用。 首先,我们需要在Android布局文件中添加一...

    Android使用WebView调用H5完成摄像头扫描二维码

    通过WebView,开发者可以将Web技术与原生Android应用结合,实现更丰富的交互体验。 为了调用摄像头并扫描二维码,我们需要在H5页面中使用相关的JavaScript库,例如`html5-qrcode`。这个库提供了一种简单的方法来...

    webview与js的交互调用

    总结,Android的WebView组件为我们提供了Java与JavaScript交互的能力,这极大地扩展了应用的功能边界。无论是实现原生应用与网页的双向通信,还是构建混合式应用,都离不开这种交互机制。理解并掌握WebView的交互...

    webview组件javascript调用java的小程序

    综上所述,"webview组件javascript调用java的小程序"这个主题涉及到的核心知识点包括:WebView组件的使用、JavaScript与Java的交互机制、`addJavascriptInterface`方法的使用以及`WebViewClient`和`WebChromeClient`...

    详解Flutter WebView与JS互相调用简易指南

    WebView与JS互相调用是一个刚需,但是貌似现在大家写的文章讲的都不是很清楚,我这个简易指南简单粗暴地分为两部分:JS调用Flutter和Flutter调用JS,拒绝花里胡哨,保证一看就懂,一学就会。 开始之前先简单了解...

    WebView基本的js与java相互调用

    本教程将详细讲解如何实现JavaScript与Java之间的基本交互,即WebView中的js调用Android代码以及Android对js的调用。 一、WebView的配置 首先,我们需要在XML布局文件中添加WebView组件,并在对应的Activity中初始...

    QT(C++)与Web的JS相互调用实用例子

    QT(C++)与Web的JS相互调用是现代跨平台应用开发中常见的需求,尤其在构建混合型应用时。QT库提供了一种强大的机制,允许C++代码与JavaScript环境进行交互,这主要通过QT的QWebChannel模块来实现。本实例将详细解释...

    WebView实现Java与JS相互调用

    1. **Java调用JS**:在Java代码中,我们可以通过`WebView.loadUrl()`方法加载一个JavaScript URL,或者使用`WebView.evaluateJavascript()`(API 19及以上)来执行一段JS代码并获取返回值。这样,我们可以调用网页中...

    qt 调用javascript函数 带参数

    3. **调用JavaScript函数** 要从C++调用JavaScript函数,可以使用`QWebView`的`page()-&gt;mainFrame()`方法获取`QWebFrame`对象,然后调用其`evaluateJavaScript()`函数。例如,如果你有一个名为`myJSFunction`的...

    android webview js 调用接口拍照效果

    总结来说,“android webview js 调用接口拍照效果”涉及到的主要知识点包括:Android Webview的JavaScript接口交互、权限管理、相机API的使用、图片处理以及H5与原生应用的交互。通过这些技术,开发者可以为H5应用...

    Android-x5webview和js交互的三方库

    2. **Android Native调用JavaScript函数**:反之,Android代码也可以通过X5Bridge来执行JavaScript代码,这在需要更新网页状态或者触发某些JavaScript逻辑时非常有用。 3. **安全机制**:X5Bridge提供了安全机制,...

    使用WebView中的Javascript和本地代码交互

    JavaScript可以像调用任何其他JavaScript函数一样调用这些方法,只需确保使用正确的对象名称(在本例中为`android`): ```javascript ('Hello, Android!')"&gt;点击我 ``` 此外,我们也可以从Java代码中调用...

Global site tag (gtag.js) - Google Analytics