`
ch_kexin
  • 浏览: 897591 次
  • 性别: Icon_minigender_2
  • 来自: 青岛
社区版块
存档分类
最新评论

Android的WebView通过JS调用java代码

 
阅读更多

做项目时候会遇到我们用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, 但是低版本上是不能避免。

分享到:
评论

相关推荐

    android使用webView实现java程序与js脚本的相互调用

    同时,WebView还提供了Java代码与JavaScript交互的能力,使得我们可以利用JavaScript的灵活性和Android原生功能的强大结合,创建出丰富的混合应用。本文将详细介绍如何在Android中使用WebView实现Java程序与JS脚本的...

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

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

    Android WebView H5调用拍照

    为了使H5页面能够调用Android原生的拍照功能,我们需要在Java代码中实现一个JavaScript接口。这可以通过WebView的addJavascriptInterface方法实现。下面是一个简单的示例: ```java private class ...

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

    如果需要在WebView中启用JavaScript调用Android代码的功能,还要在addJavascriptInterface()方法中声明一个Java类的实例,并为其指定一个可以在JavaScript中访问的接口名字。 在Java代码中定义一个内部类,用于接收...

    webview组件javascript调用java的小程序

    这个"webview组件javascript调用java的小程序"就是一个实例,展示了如何实现这种通信机制。下面我们将深入探讨这个主题。 首先,WebView是Android SDK提供的一种视图类,它能够加载和显示HTML、CSS和JavaScript内容...

    android JS与java代码相互调用

    JavaScript调用Java代码通常需要通过`WebView`的`addJavascriptInterface()`方法创建一个接口,然后在JS中通过`window对象`来调用。例如: ```java webView.addJavascriptInterface(new MyJavaInterface(), ...

    webview控件使用(java代码和js的互相调用)

    总结:WebView组件是Android应用与Web内容交互的关键工具,通过设置JavaScript支持和添加JavaScript接口,可以轻松实现Java代码与JavaScript的双向通信。这极大地扩展了原生应用的功能,使开发者能够利用Web技术构建...

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

    3. 在网页中通过JavaScript调用这个接口。 4. 处理权限请求,确保应用有权限访问相机和外部存储。 5. 在相机活动返回后,更新网页以显示拍摄的照片。 通过这样的方式,你可以在Android应用的WebView中无缝集成系统...

    android之webview与js相互调用

    JavaScript调用Android代码则需要实现`WebViewClient`的`shouldOverrideUrlLoading()`方法,并通过`addJavascriptInterface()`添加一个Java对象到Webview,使得JavaScript可以访问这个对象的方法。 首先,创建一个...

    WebView中 Js 和 Android java代码相互调用

    通过上述方式,我们可以实现JavaScript和Android Java代码的双向交互,为WebView提供更加丰富的功能。在实际项目中,可以结合`js和java相互调用.doc`文档和`js.html`示例页面进行实践,以便更好地理解和掌握这一技术...

    android不使用webview与js交互

    首先,我们要理解Webview是通过`WebViewClient`和`WebChromeClient`的接口来实现Java与JavaScript的通信的,如`addJavascriptInterface()`方法可以让JavaScript调用Java对象的方法,而`evaluateJavascript()`则允许...

    Android WebView js与Java调用实例

    为了使JavaScript能够调用Java代码,我们需要启用JavaScript执行并实现`addJavascriptInterface()`方法。在Java代码中创建一个类,该类中的方法将暴露给JavaScript调用: ```java public class ...

    android java和webview交互demo

    2. **JavaScript调用Android方法** 在网页中,可以通过`window.android.androidFunction()`来触发Android端的方法。 3. **Android调用JavaScript方法** 使用`loadUrl()`方法,可以执行JavaScript代码: ```java ...

    Android webview调用相机和相册

    这里需要用到WebView的`addJavascriptInterface`方法,创建一个Java对象并暴露给JavaScript调用。例如,我们可以创建一个名为`WebAppInterface`的类: ```java public class WebAppInterface { private Context ...

    Android webview调用摄像头扫描二维码

    本文将详细讲解如何在Android Webview中调用摄像头进行二维码扫描,并结合ZXing(Zebra Crossing)解析包进行二维码的解析。 首先,让我们了解Android Webview的基本用法。Webview是Android SDK提供的一种视图组件...

    android Webview(H5)中调用相册和拍照

    当H5页面需要调用设备的相机或相册功能时,一般会通过JavaScript接口触发,然后由Android原生代码处理。由于Android系统版本的不同,调用方式也会有所差异。在API 23及以上版本,需要申请运行时权限: ```java if ...

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

    1. **WebView的引入**:在Android应用中,我们需要在布局XML文件中添加WebView组件,并在Java代码中实例化并设置相关属性。例如: ```xml &lt;WebView android:id="@+id/webView" android:layout_width="match_parent...

    Android中webview使用js与java交互

    在Android开发中,WebView是一个非常重要的组件,它允许我们在应用程序中内嵌网页内容,并且能够实现JavaScript与Java代码之间的交互,极大地丰富了应用的功能。本文将深入探讨如何在Android的WebView中利用...

    android webview js交互调用

    这个对象上的所有公共方法都将可供JavaScript调用,但需要注意安全问题,因为这可能导致跨站脚本攻击(XSS)。 - JavaScript Interface命名空间:为了防止恶意JavaScript访问,可以设置`@JavascriptInterface`注解...

    android webview js 调用接口拍照效果

    通过这个接口,我们可以将Java对象暴露给JavaScript,使得JavaScript代码能够调用Android的原生方法。例如,我们可以创建一个Java对象,包含一个拍照的方法,然后使用`addJavascriptInterface()`将其绑定到Webview。...

Global site tag (gtag.js) - Google Analytics