做项目时候会遇到我们用WebView 打开一个web,希望这个web可以调用自己的一些方法,比如我们在进一个web页面,然后当我们点击web上的某个按钮时,希望能判断当前手机端是否已经登录,如果未登录,那么就会跳转到登录页面(登陆页面是另一个Activity)。这个时候,一个简单的做法就是在按钮动作事件的js上调用java的方法,从而起到判断是否登录,并决定是否跳转到另一个页面。
Google的WebView为我们提供了 addJavascriptInterface(Object obj, String interfaceName)方法,这个方法的第一个参数是传给Web的对象,第二个参数是该对象的对象名。
public class WebActivity extends Activity{ ProgressBar mProgressBar; WebView mWebView; String mUrl; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.web); mWebView = (WebView) findViewById(R.id.web_view); mProgressBar = (ProgressBar) findViewById(R.id.loading_progress); doWebViewSetting(); // 加载网页 loadUrl("http://172.10.1.2:8080/test"); } private void doWebViewSetting(){ // 设置WebClient(可不要) mWebView.setWebViewClient(new MyWebViewClient()); // 支持js(必要) mWebView.getSettings().setJavaScriptEnabled(true); // 添加js对象(必要) mWebView.addJavascriptInterface(new JsOperation(this), "client"); } private void loadUrl(String url) { mUrl = url; mProgressBar.setVisibility(View.VISIBLE); mWebView.loadUrl(url); } class MyWebViewClient extends WebViewClient{ @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); mProgressBar.setVisibility(View.GONE); } } class JsOperation { Activity mActivity; public JsOperation(Activity activity) { mActivity = activity; } // 测试方法 @javascriptInterface public void test() { Toast.makeText(mActivity,"test",Toast.LENGTH_SHORT).show(); } }
以上是我的WebActivity ,我这里只简单的实现的加载时进度条显示和提供对象给js。可以看出,我们提供了一个JsOperation 对象给web,然后在JsOperation 类中定义了test()方法。接下来就看看,Web方面要如何调用该方法。
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>测试</title> <script type="text/javascript"> function test(){ client.test() } </script> </head> <body> <br /> <button onclick="test()">test</button> </body> </html>
web的实现方式特别简单,直接调用我们提供的对象,这里要注意的是,对象名是我们之前传入的String,这里是client,直接调用它的test()方法,就能弹出一个Toast了,当然你也可以在这个方法里做其他的各种处理,也可以提供多个方法,如果你需要传入参数,那么在java上定义好形参后,js上就正常的调用方法并传入参数,如client.test(param)就可以了,没什么特别要注意的地方。
特别注意:Android的WebView存在安全漏洞,因为js调用对象是可以通过反射再调用Runtime甚至可能以web挂马形式控制主机,google也承认webView这个功能太强了,给了web很大的权利,Android 4.2 (api17)已经开始采用新的接口方法,@JavascriptInterface 代替addjavascriptInterface, 但是低版本上是不能避免。
相关推荐
同时,WebView还提供了Java代码与JavaScript交互的能力,使得我们可以利用JavaScript的灵活性和Android原生功能的强大结合,创建出丰富的混合应用。本文将详细介绍如何在Android中使用WebView实现Java程序与JS脚本的...
本示例“android demo,webview_js”着重展示了如何通过Webview实现JavaScript调用Java方法的功能。这个功能对于创建混合式应用或者在原生应用中嵌入HTML5页面尤其有用。 首先,我们需要在Android布局文件中添加一...
为了使H5页面能够调用Android原生的拍照功能,我们需要在Java代码中实现一个JavaScript接口。这可以通过WebView的addJavascriptInterface方法实现。下面是一个简单的示例: ```java private class ...
如果需要在WebView中启用JavaScript调用Android代码的功能,还要在addJavascriptInterface()方法中声明一个Java类的实例,并为其指定一个可以在JavaScript中访问的接口名字。 在Java代码中定义一个内部类,用于接收...
这个"webview组件javascript调用java的小程序"就是一个实例,展示了如何实现这种通信机制。下面我们将深入探讨这个主题。 首先,WebView是Android SDK提供的一种视图类,它能够加载和显示HTML、CSS和JavaScript内容...
JavaScript调用Java代码通常需要通过`WebView`的`addJavascriptInterface()`方法创建一个接口,然后在JS中通过`window对象`来调用。例如: ```java webView.addJavascriptInterface(new MyJavaInterface(), ...
总结:WebView组件是Android应用与Web内容交互的关键工具,通过设置JavaScript支持和添加JavaScript接口,可以轻松实现Java代码与JavaScript的双向通信。这极大地扩展了原生应用的功能,使开发者能够利用Web技术构建...
3. 在网页中通过JavaScript调用这个接口。 4. 处理权限请求,确保应用有权限访问相机和外部存储。 5. 在相机活动返回后,更新网页以显示拍摄的照片。 通过这样的方式,你可以在Android应用的WebView中无缝集成系统...
JavaScript调用Android代码则需要实现`WebViewClient`的`shouldOverrideUrlLoading()`方法,并通过`addJavascriptInterface()`添加一个Java对象到Webview,使得JavaScript可以访问这个对象的方法。 首先,创建一个...
通过上述方式,我们可以实现JavaScript和Android Java代码的双向交互,为WebView提供更加丰富的功能。在实际项目中,可以结合`js和java相互调用.doc`文档和`js.html`示例页面进行实践,以便更好地理解和掌握这一技术...
首先,我们要理解Webview是通过`WebViewClient`和`WebChromeClient`的接口来实现Java与JavaScript的通信的,如`addJavascriptInterface()`方法可以让JavaScript调用Java对象的方法,而`evaluateJavascript()`则允许...
为了使JavaScript能够调用Java代码,我们需要启用JavaScript执行并实现`addJavascriptInterface()`方法。在Java代码中创建一个类,该类中的方法将暴露给JavaScript调用: ```java public class ...
2. **JavaScript调用Android方法** 在网页中,可以通过`window.android.androidFunction()`来触发Android端的方法。 3. **Android调用JavaScript方法** 使用`loadUrl()`方法,可以执行JavaScript代码: ```java ...
这里需要用到WebView的`addJavascriptInterface`方法,创建一个Java对象并暴露给JavaScript调用。例如,我们可以创建一个名为`WebAppInterface`的类: ```java public class WebAppInterface { private Context ...
本文将详细讲解如何在Android Webview中调用摄像头进行二维码扫描,并结合ZXing(Zebra Crossing)解析包进行二维码的解析。 首先,让我们了解Android Webview的基本用法。Webview是Android SDK提供的一种视图组件...
当H5页面需要调用设备的相机或相册功能时,一般会通过JavaScript接口触发,然后由Android原生代码处理。由于Android系统版本的不同,调用方式也会有所差异。在API 23及以上版本,需要申请运行时权限: ```java if ...
1. **WebView的引入**:在Android应用中,我们需要在布局XML文件中添加WebView组件,并在Java代码中实例化并设置相关属性。例如: ```xml <WebView android:id="@+id/webView" android:layout_width="match_parent...
在Android开发中,WebView是一个非常重要的组件,它允许我们在应用程序中内嵌网页内容,并且能够实现JavaScript与Java代码之间的交互,极大地丰富了应用的功能。本文将深入探讨如何在Android的WebView中利用...
这个对象上的所有公共方法都将可供JavaScript调用,但需要注意安全问题,因为这可能导致跨站脚本攻击(XSS)。 - JavaScript Interface命名空间:为了防止恶意JavaScript访问,可以设置`@JavascriptInterface`注解...
通过这个接口,我们可以将Java对象暴露给JavaScript,使得JavaScript代码能够调用Android的原生方法。例如,我们可以创建一个Java对象,包含一个拍照的方法,然后使用`addJavascriptInterface()`将其绑定到Webview。...