Android中WebView的基本配置与填坑记录大全

yizhihongxing

Android中WebView的基本配置与填坑记录大全

本文将详细介绍Android中WebView的基本配置和一些坑点记录。WebView是Android中经常用到的控件,它能够方便地显示Web页面或者本地HTML页面,同时也支持JavaScript交互。

1. 添加依赖

build.gradle的dependencies中添加如下依赖:

implementation 'androidx.webkit:webkit:1.4.0'

2. 添加网络权限

AndroidManifest.xml中添加如下权限:

<uses-permission android:name="android.permission.INTERNET" />

3. 布局文件中添加WebView

在布局文件中添加WebView:

<WebView
    android:id="@+id/web_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

4. 初始化WebView

在Activity的onCreate方法中,获取WebView实例并进行一些基本配置:

WebView webView = findViewById(R.id.web_view);
WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true); // 开启JavaScript支持
settings.setCacheMode(WebSettings.LOAD_NO_CACHE); // 不使用缓存

5. 加载Web页面

可以通过loadUrl方法加载Web页面:

webView.loadUrl("https://www.example.com");

也可以通过loadData方法加载HTML页面:

String html = "<html><h1>Hello world</h1></html>";
webView.loadData(html, "text/html", "UTF-8");

6. WebView与JavaScript交互

6.1 WebView调用JavaScript方法

通过evaluateJavascript方法调用JavaScript方法:

webView.evaluateJavascript("javascript:alert('hello')", null);

6.2 JavaScript调用WebView方法

在WebView中添加JavaScript接口:

public class WebViewJavaScriptInterface {
    @JavascriptInterface
    public void showMessage(String message) {
        Toast.makeText(MainActivity.this, message, Toast.LENGTH_SHORT).show();
    }
}

webView.addJavascriptInterface(new WebViewJavaScriptInterface(), "android");

在JavaScript代码中调用:

android.showMessage("hello");

填坑记录

1. WebView加载页面时如何统一携带请求头

在WebView加载页面时,可以通过WebViewClient的onPageStarted方法来统一携带请求头:

webView.setWebViewClient(new WebViewClient() {
    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        super.onPageStarted(view, url, favicon);
        Map<String, String> headers = new HashMap<>();
        headers.put("User-Agent", "Mozilla/5.0");
        view.loadUrl(url, headers);
    }
});

2. WebView页面缓存问题

在WebSettings中设置CacheMode为LOAD_NO_CACHE可以禁用WebView缓存。如果需要缓存,则需要设置缓存路径和缓存模式:

String cacheDirPath = getFilesDir().getAbsolutePath() + "/webcache";
settings.setAppCachePath(cacheDirPath);
settings.setAllowFileAccess(true);
settings.setAppCacheEnabled(true);
settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);

同时,在WebViewClient中处理缓存:

webView.setWebViewClient(new WebViewClient() {
    @Override
    public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
            return super.shouldInterceptRequest(view, request);
        }
        String url = request.getUrl().toString();
        WebResourceResponse response = null;
        try {
            URLConnection connection = new URL(url).openConnection();
            InputStream inputStream = connection.getInputStream();
            Map<String, List<String>> headers = connection.getHeaderFields();
            String mimeType = connection.getContentType();
            String encoding = connection.getContentEncoding();
            response = new WebResourceResponse(mimeType, encoding, inputStream);
            response.setResponseHeaders(headers);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return response;
    }
});

示例说明

示例1:WebView加载百度页面

在Activity中添加如下代码:

WebView webView = findViewById(R.id.web_view);
WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);
settings.setCacheMode(WebSettings.LOAD_NO_CACHE);
webView.setWebViewClient(new WebViewClient() {
    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        super.onPageStarted(view, url, favicon);
        Map<String, String> headers = new HashMap<>();
        headers.put("User-Agent", "Mozilla/5.0");
        view.loadUrl(url, headers);
    }
});
webView.loadUrl("https://www.baidu.com");

示例2:WebView加载本地HTML页面

在Activity中添加如下代码:

WebView webView = findViewById(R.id.web_view);
WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);
String html = "<html><h1>Hello world</h1></html>";
webView.loadData(html, "text/html", "UTF-8");

总结

本文介绍了Android中WebView的基本配置和一些坑点记录。希望本文能够帮助你更好地使用WebView。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android中WebView的基本配置与填坑记录大全 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • 浅谈golang的http cookie用法

    浅谈golang的http cookie用法 什么是Cookie? HTTP协议是无状态的,也就是说,当客户端加载一个页面或者访问一个接口时,服务器并不知道这个请求与之前的请求之间有关系,而Cookie就是为了解决这个问题的,它可以把一些关键性的信息,如用户的登录状态等,保存在客户端,以便在后续的请求中向服务器传递这些信息。 Cookie有两种类型,分别是s…

    JavaScript 2023年6月11日
    00
  • JQuery实现ajax请求的示例和注意事项

    当使用jQuery实现ajax请求时,可以通过调用jQuery的ajax()方法发送HTTP请求,并通过该方法提供的参数进行配置。以下是实现ajax请求的示例和注意事项: 示例一:发送GET请求 $.ajax({ url: ‘/api/data’, // 请求的API地址 type: ‘GET’, // 请求方法为GET dataType: ‘json’, …

    JavaScript 2023年6月11日
    00
  • 使用 vue-i18n 切换中英文效果

    使用 vue-i18n 切换中英文的过程需要遵循以下几个步骤: 第一步:安装 vue-i18n 在使用 vue-i18n 进行中英文切换前,需要在项目中安装 vue-i18n。可以使用 npm 等工具进行安装,具体的安装命令为: npm install vue-i18n –save 第二步:添加语言文件 在 /src 目录下新建一个文件夹 i18n,然后在…

    JavaScript 2023年6月10日
    00
  • JavaScript sup方法入门实例(把字符串显示为上标)

    下面是详细的讲解。 JavaScript sup 方法入门实例(把字符串显示为上标) 什么是 sup 方法? sup 是 JavaScript 中字符串对象的方法之一,用于将指定文本显示为上标,即像 x²(表示 x 的平方)这样的效果。 sup 方法语法 stringObject.sup() 其中,stringObject 为要进行上标处理的字符串。 sup…

    JavaScript 2023年5月28日
    00
  • JS控制TreeView的结点选择

    控制TreeView结点选择的方法主要有以下两种: 使用JavaScript代码控制TreeView的结点选择 可以通过JS控制TreeView的checkbox,从而实现TreeView的选择控制。具体实现过程如下: (1)获取TreeView的DOM结构 <asp:TreeView ID="TreeView1" runat=&q…

    JavaScript 2023年6月11日
    00
  • JS区分浏览器页面是刷新还是关闭

    JS如何区分浏览器页面是刷新还是关闭是一个比较常见的问题。具体实现方法一般是通过事件监听,监听两种事件:beforeunload和unload。 beforeunload事件 当页面即将刷新或关闭时,会触发beforeunload事件。在事件处理函数中,我们可以添加一些操作,比如弹出确认框,让用户确认是否要离开页面。 示例1:弹出确认框 window.add…

    JavaScript 2023年6月11日
    00
  • Javascript学习笔记之数组的遍历和 length 属性

    Javascript学习笔记之数组的遍历和 length 属性 介绍 在 Javascript 中,数组是一种常见的数据结构。数组是一组按顺序排列的值的集合,每个值都可以通过一个索引进行访问。数组可以存储各种类型的值,包括数字、字符串、对象和函数等。 数组的 length 属性用于获取数组的长度,即其中元素的数量。 在本文中,我将介绍如何遍历数组以及如何使用…

    JavaScript 2023年5月27日
    00
  • 利用JS实现AI自动玩贪吃蛇

    实现AI自动玩贪吃蛇的具体步骤一般包括以下几个部分: 1. 实现贪吃蛇游戏逻辑 首先,需要实现贪吃蛇游戏的基本逻辑,包括蛇的移动、食物生成、吃食物、增长等功能。这部分的代码实现方式可以参考一些贪吃蛇游戏的教程和示例代码,例如利用canvas绘制贪吃蛇游戏界面及游戏逻辑等。具体实现方法可以参考下面的示例: // 初始化贪吃蛇游戏界面 var canvas = …

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部