Android:WebView与js交互方式

简介: 通过WebView的addJavascriptInterface()进行对象映射 将JS代码javascript.html格式放到src/main/assets文件夹里 javascript.html

一、通过WebView的addJavascriptInterface()进行对象映射


1、将JS代码javascript.html格式放到src/main/assets文件夹里


javascript.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>JavaScript</title>
    <script>
       function callAndroid(){
            native.post("native://back");
         }
    </script>
</head>
<!-- 点击按钮则调用callAndroid()方法  -->
<body>
<button type="button" id="button1" onclick="callAndroid()">点击调用Android代码</button>
</body>
</html>


2、在Android里通过WebView设置调用JS代码


webSettings.setJavaScriptEnabled(true);


//AndroidtoJS类对象映射到js的native对象


wvWebview.addJavascriptInterface(newWebJumpUtils(this), "native");


wvWebview.loadUrl("file:///android_asset/javascript.html");


/**
 * WebView跳转功能
 */
public class WebJumpUtils {
    private Activity activity;
    public WebJumpUtils(Activity activity) {
        this.activity = activity;
    }
    @JavascriptInterface
    public void post(String message) {
        //message ==  "native://back" 进行你的处理
        MLog.e("WebJumpUtils", message);
        switch (message) {
            case "native://back"://回退
                if (activity != null && !activity.isFinishing())//避免IllegalArgumentException
                {
                    activity.finish();
                }
                break;
            case "native://login"://登录
                startAct(AlreadyRegisterActivity.class);
                break;
        }
    }
}


二、通过 WebViewClient 的shouldOverrideUrlLoading ()方法回调拦截 url


1、wvWebview.setWebViewClient(new MyWebViewClient());


2、back需要前后台约定好


private class MyWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if (url.contains("back")) {
            handlerH.sendEmptyMessage(2);
            return true;
        } 
        try {
            Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
            startActivity(intent);
        } catch (Exception e) {
        }
        return true;
    }
    @Override
    public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
        //接受证书
        if(error.getPrimaryError() == android.net.http.SslError.SSL_INVALID ){// 校验过程遇到了bug
            handler.proceed();
        }else{
            handler.cancel();
        }
        super.onReceivedSslError(view, handler, error);
    }
}


三、通过 WebChromeClient 的onJsAlert()、onJsConfirm()、onJsPrompt()方法回调拦截JS对话框alert()、confirm()、prompt() 消息


1、wvWebview.setWebChromeClient(new MyWebChromeClient());


private class MyWebChromeClient extends WebChromeClient {
    @Override
    public boolean onJsAlert(WebView view, final String url, final String message, JsResult result) {
        Log.d("main", "onJsAlert:" + message);
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                new AlertDialog.Builder(WebViewActivity.this)
                        .setTitle("提示")
                        .setMessage(message)
                        .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                            }
                        })
                        .show();
            }
        });
        result.confirm();//这里必须调用,否则页面会阻塞造成假死
        return true;
    }
}


推荐使用方法一!

相关文章
|
8月前
|
缓存 JavaScript 前端开发
Android WebView常见问题
本文主要介绍了在Android开发中WebView的使用方法,包括加载网址、设置相关属性(如JavaScript支持、缓存模式、屏幕适配等)、监听网页加载过程以及返回上一页面的功能实现。同时针对Android P版本限制明文流量的问题(ERR_CLEARTEXT_NOT_PERMITTED),提供了在`AndroidManifest.xml`中添加`android:usesCleartextTraffic=&quot;true&quot;`的解决办法。文章还附有完整代码示例,帮助开发者快速上手并解决常见问题。希望对您的开发工作有所帮助!
430 1
|
10月前
|
XML JavaScript Android开发
【Android】网络技术知识总结之WebView,HttpURLConnection,OKHttp,XML的pull解析方式
本文总结了Android中几种常用的网络技术,包括WebView、HttpURLConnection、OKHttp和XML的Pull解析方式。每种技术都有其独特的特点和适用场景。理解并熟练运用这些技术,可以帮助开发者构建高效、可靠的网络应用程序。通过示例代码和详细解释,本文为开发者提供了实用的参考和指导。
372 15
|
11月前
|
数据采集 JavaScript Android开发
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
507 7
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
程序员 开发工具 Android开发
Android|WebView 禁止长按,限制非白名单域名的跳转层级
如何限制 WebView 仅域名白名单网址能随意跳转,并禁用长按选择文字。
305 2
|
移动开发 JavaScript Java
Android与JS互相调
Android与JS互相调
|
安全 JavaScript 前端开发
kotlin开发安卓app,JetPack Compose框架,给webview新增一个按钮,点击刷新网页
在Kotlin中开发Android应用,使用Jetpack Compose框架时,可以通过添加一个按钮到TopAppBar来实现WebView页面的刷新功能。按钮位于右上角,点击后调用`webViewState?.reload()`来刷新网页内容。以下是代码摘要:
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的高校后勤网上报修系统安卓app附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的高校后勤网上报修系统安卓app附带文章源码部署视频讲解等
170 0
|
Web App开发 JavaScript 前端开发
Android端使用WebView注入一段js代码实现js调用android
Android端使用WebView注入一段js代码实现js调用android
400 0
|
安全 网络安全 API
kotlin安卓开发JetPack Compose 如何使用webview 打开网页时给webview注入cookie
在Jetpack Compose中使用WebView需借助AndroidView。要注入Cookie,首先在`build.gradle`添加WebView依赖,如`androidx.webkit:webkit:1.4.0`。接着创建自定义`ComposableWebView`,通过`CookieManager`设置接受第三方Cookie并注入Cookie字符串。最后在Compose界面使用这个自定义组件加载URL。注意Android 9及以上版本可能需要在网络安全配置中允许第三方Cookie。
|
JavaScript 前端开发 Android开发
android开发,使用kotlin学习WebView(详细)
android开发,使用kotlin学习WebView(详细)
910 0