首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Android实现WebView加载assets文件夹下的html文件,html返回webView.canGo,android嵌入h5进行交互,调试错误 net::ERR_FILE_NOT_FOUND

Android实现WebView加载assets文件夹下的html文件,html返回webView.canGo,android嵌入h5进行交互,调试错误 net::ERR_FILE_NOT_FOUND

作者头像
zhangjiqun
发布于 2024-12-16 10:32:25
发布于 2024-12-16 10:32:25
42300
代码可运行
举报
文章被收录于专栏:计算机工具计算机工具
运行总次数:0
代码可运行
调试错误 net::ERR_FILE_NOT_FOUND 

我的环境:win7 ,Android studio 3.0.1.   java8;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
webView.loadUrl("file:android_asset/text");
html超链接在 Android studio 中的使用:

<a href="file:///android_asset/text2">点击</a></head>

html返回webView.canGo,goBack
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {

            if (webView.canGoBack()) {
                webView.goBack();

            } else {
                finish();
            }
        }
        return super.onKeyDown(keyCode, event);
    }
Android和H5之间的交互

1、webView加载页面 我们都知道在Android中是通过webView来加载html页面的,根据HTML文件所在的位置不同写法也不同: //例如:加载assets文件夹下的test.html页面

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
webView.loadUrl("file:android_asset/text");

:加载网页

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mWebView.loadUrl("http://www.baidu.com")

如果只是这样调用mWebView.loadUrl()加载的话,那么当你点击页面中的链接时,页面将会在你手机默认的浏览器上打开。那如果想要页面在App内中打开的话,那么就得设置setWebViewClient:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mWebView.setWebViewClient(new WebViewClient() {
                @Override
                public boolean shouldOverrideUrlLoading(WebView view, String url) {
                    mWebView.loadUrl(url);
                    return true;
                }
            }

2、Android本地通过Java调用HTML页面中的JavaScript方法 想要调用js方法那么就必须让webView支持 WebSettings webSettings = mWebView.getSettings(); //设置为可调用js方法 webSettings.setJavaScriptEnabled(true); 若调用的js方法没有返回值,则直接可以调用mWebView.loadUrl("JavaScript:do()");其中do是js中的方法;若有返回值时我们可以调用mWebView.evaluateJavascript()方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        tv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                webView.evaluateJavascript("sum(1,2)", new ValueCallback<String>() {
                    @Override
                    public void onReceiveValue(String value) {
                        tv.setText("sum= "+value);
                    }
                });
            }
        });

js代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script type="text/javascript">
function sum(a,b){
return a+b;
}

</script>

2、js调用Android本地Java方法 在Android4.2以上可以直接使用@JavascriptInterface注解来声明,下面是在一个本地Java方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.itep.myapplication;

import android.webkit.JavascriptInterface;

/**
 * Created by Administrator on 2020/4/10 0010.
 */

public class JsInteration {
    @JavascriptInterface
    public String back() {
        return "hello world";
    }

}

定义完这个方法后再调用mWebView.addJavascriptInterface()方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
webView.addJavascriptInterface(new JsInteration(), "android_ceshi");

那么在js中怎么来调用呢?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html>
<html>
<head>
    <title></title>
    <h1>text 2</h1>
    <button onclick="s()">dianji</button>
    <script type="text/javascript">
    function sum(a,b){
    return a+b;
    }
     function s(){
    var result =window.android_ceshi.back();
    document.getElementById("p").innerHTML=result;
    }
     function ceshi(){

   var ss="123";
   document.write(ss);
    }


    </script>
</head>
<body>
<button onclick="s()">调用本地方法</button>
<a href="file:///android_asset/test2">点击</a>
<p id="p"></p>
</body>
</html>

4、拦截HTML页面中的点击事件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        webView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
//判断url拦截事件
                if (url.equals("file:///android_asset/text2")) {
                    Log.e(TAG, "shouldOverrideUrlLoading: " + url);
                    startActivity(new Intent(MainActivity.this,MainActivity_two.class));
                    return true;
                } else {
                    webView.loadUrl(url);
                    return false;
                }
            }
        });

tex.html

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html>
<html>
<head>
    <title></title>
    <p>你好你好script type你好script type你好script type你好script type</p>
    <button onclick="ceshi()">dianji</button>
    <button onclick="ceshi()">dianji</button>
    <button onclick="ceshi()">dianji</button>
    <button onclick="ceshi()">dianji</button>
    <button onclick="ceshi()">dianji</button>
    <button onclick="ceshi()">dianji</button>
    <script type="text/javascript">
    function sum(a,b){
    return a+b;
    }
     function s(){
    var result =window.android.back();
    document.getElementById("p").innerHTML=result;
    }
     function ceshi(){
     var ss="123";
     document.write(ss);
    }


    </script>
    <a href="file:///android_asset/text2">点击</a></head>
<body>
<button onclick="s()">调用本地方法</button>

<p id="p">ceshi</p>
</body>
</html>

text2.html

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html>
<html>
<head>
    <title></title>
    <h1>text 2</h1>
    <button onclick="s()">dianji</button>
    <script type="text/javascript">
    function sum(a,b){
    return a+b;
    }
     function s(){
    var result =window.android.back();
    document.getElementById("p").innerHTML=result;
    }
     function ceshi(){

   var ss="123";
   document.write(ss);
    }


    </script>
</head>
<body>
<button onclick="s()">调用本地方法</button>
<a href="file:///android_asset/test2">点击</a>
<p id="p"></p>
</body>
</html>

MainActivity.class

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.itep.myapplication;

import android.content.Intent;
import android.os.Build;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.webkit.ValueCallback;
import android.webkit.WebResourceRequest;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "MainActivity";

    // Used to load the 'native-lib' library on application startup.
    static {
        System.loadLibrary("native-lib");
    }

    WebView webView;
    TextView tv;

    /**
     * @param savedInstanceState
     */
    @RequiresApi(api = Build.VERSION_CODES.KITKAT)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        webView = findViewById(R.id.wb);
        WebSettings webSettings = webView.getSettings();
        //设置为可调用js方法
        webSettings.setJavaScriptEnabled(true);
        webView.getSettings().setDefaultTextEncodingName("utf-8");
//        webView.loadUrl("file:android_asset/text.html");
        webView.loadUrl("file:android_asset/text");
        // Example of a call to a native method
        tv = (TextView) findViewById(R.id.sample_text);
        webView.addJavascriptInterface(new JsInteration(), "android");
        webView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
//判断url拦截事件
                if (url.equals("file:///android_asset/text2")) {
                    Log.e(TAG, "shouldOverrideUrlLoading: " + url);
                    startActivity(new Intent(MainActivity.this,MainActivity_two.class));
                    return true;
                } else {
                    webView.loadUrl(url);
                    return false;
                }
            }
        });
        tv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            }
        });

        //        tv.setText(new Text().stringFromJNI());
    }

    /**
     * A native method that is implemented by the 'native-lib' native library,
     * which is packaged with this application.
     */
    public native String stringFromJNI();
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
JsInteration:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.itep.myapplication;

import android.webkit.JavascriptInterface;

/**
 * Created by Administrator on 2020/4/10 0010.
 */

public class JsInteration {
    @JavascriptInterface
    public String back() {
        return "hello world";
    }

}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-12-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
表的增删改查(MySQL)
CRUD : Create(创建), Retrieve(读取),Update(更新),Delete(删除)
ljw695
2025/05/31
2040
表的增删改查(MySQL)
Mysql配套测试之更新篇
猫咪-9527
2025/03/24
520
Mysql配套测试之更新篇
Mysql配套测试之查询篇
猫咪-9527
2025/03/24
430
Mysql配套测试之查询篇
MySQL表的增删查改
values左侧为表中属性,右侧为自定义插入的内容,左右两侧安装顺序是一一对应的,如果顺序不同就会导致类型不同而出错。
每天都要进步呀
2023/10/16
8840
MySQL表的增删查改
MYSQL数据库-基本操作
MYSQL数据库-基本操作 零、前言 表的增删改查 一、Create 1、插入 2、更新和替换 二、Retrieve 1、SELECT 查询 2、WHERE 条件 3、结果排序 4、筛选分页结果 三、Update 四、Delete 1、删除数据 2、截断表 五、插入查询结果 六、聚合函数 七、group by 零、前言 本章主要讲解表的基本操作 表的增删改查 CRUD : Create(创建), Retrieve(读取),Update(更新),Delete(删除) 一、Create 创建语法:
用户9645905
2022/11/15
1.2K0
MYSQL数据库-基本操作
【MySQL】表数据的CRUD操作详解
CRUD : Create(创建), Retrieve(读取),Update(更新),Delete(删除)
用户11316056
2025/02/26
1910
【MySQL】表数据的CRUD操作详解
MySQL基本查询
MySQL中的基本查询,即CRUD : Create(创建), Retrieve(读取),Update(更新),Delete(删除)
二肥是只大懒蓝猫
2023/10/13
5020
【MySql】基本查询
这是由于sql的执行顺序影响:这里的执行顺序非常重要,这里无法使用别名,很简单:这是因为先执行from,先从哪个表里筛选数据,筛选的时候,得先设定筛选条件
平凡的人1
2023/10/15
5920
【MySql】基本查询
【MySQL初阶】表的增删查改(create、retrieve、update、delete)
这里明明给 chinese + math + english 取了别名,怎么在where条件中不能用呢? 这和 select 语句的执行顺序有关:
_小羊_
2025/05/17
3340
【MySQL初阶】表的增删查改(create、retrieve、update、delete)
Mysql表的增删改查
create语句用于向数据库中插入新数据。理解如何高效地插入数据是数据库操作的基本技能。
猫咪-9527
2025/03/22
4130
Mysql表的增删改查
【MySQL基础篇重点】六、表的增删查改
​ 一般来说,数据库的基本操作叫做 CRUD,是一种常见的编程术语,它代表了四个基本的数据库操作:创建(Create)、读取(Read)、更新(Update)和删除(Delete)。这些操作用于对数据库中的数据进行管理。
利刃大大
2025/05/21
1700
【MySQL基础篇重点】六、表的增删查改
MySQL数据表的增删改查(基础)(CRUD)
CRUD 即增加(Create)、查询(Retrieve)、更新(Update)、删除(Delete)四个单词的首字母缩写.
用户10921393
2024/03/13
3170
MySQL数据表的增删改查(基础)(CRUD)
5.MySQL增删改查(3)——修改元素
格式: update [表名] set [列名] = [修改的值] 1.把某同学的数学成绩改成80; update exam_result set math = 80 where name = ‘孙悟空’; 2.把所有同学的数学成绩减十分; update exam_result set math = math-10; 3.把倒数三名的语文成绩加上5分; update exam_result set chinese=chinese+5 order by chinese+ma
小雨的分享社区
2022/10/26
2660
5.MySQL增删改查(3)——修改元素
【MySQL】基本查询
举例:数学成绩是 58 或者 59 或者 98 或者 99 分的同学及数学成绩 这里可以用逻辑运算符in,也可以用and
用户11305458
2025/03/18
2860
【MySQL】基本查询
数据库的创建和增删查改使用操作(超详细)
阿华代码,不是逆风,就是我疯,希望本文内容能帮到你!你们的点赞收藏是我前进最大的动力!!
三三是该溜子
2024/12/30
2K0
数据库的创建和增删查改使用操作(超详细)
【MySql】聚合函数&&group by&&OJ题目
MySQL中的聚合函数用于对数据进行计算和统计,常见的聚合函数包括下面列举出来的聚合函数:
平凡的人1
2023/10/15
3840
【MySql】聚合函数&&group by&&OJ题目
【MySQL基础】表的功能实现:增删查改详细讲解
https://blog.csdn.net/2301_80220607/category_12971838.html?spm=1001.2014.3001.5482
GG Bond1
2025/07/17
740
【MySQL基础】表的功能实现:增删查改详细讲解
【MySQL】表的基本查询
插入数据: 指定values左侧的列属性实现指定列插入 省略values左侧的列属性就是全列插入,如果是自增的属性,可插可不插。
南桥
2024/12/03
1.4K0
【MySQL】表的基本查询
深入理解SQL:增删改查操作详解
CRUD : Create(创建), Retrieve(读取),Update(更新),Delete(删除)
用户11286421
2025/03/21
2060
深入理解SQL:增删改查操作详解
【MySQL数据库】数据类型和简单的增删改查
现在比较知名的关系型数据库有甲骨文的Oracle,MySQL,微软的SQL Server等。
小皮侠
2024/04/08
2570
【MySQL数据库】数据类型和简单的增删改查
相关推荐
表的增删改查(MySQL)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档