flutter android Webview 打开网页错误ERR_CLEARTEXT_NOT_PERMITTED 、 net:ERR_CACHE_MISS
发布人:shili8
发布时间:2025-03-07 08:58
阅读次数:0
**Flutter Android WebView 打开网页错误 ERR_CLEARTEXT_NOT_PERMITTED、net:ERR_CACHE_MISS**
在 Flutter 中使用 Android WebView 来打开网页时,可能会遇到一些问题。其中两个常见的错误是 ERR_CLEARTEXT_NOT_PERMITTED 和 net:ERR_CACHE_MISS。这两种错误通常与 Android 的安全策略有关。
**1. ERR_CLEARTEXT_NOT_PERMITTED**
这个错误通常出现在 Android8.0(Oreo)以上版本中。当 WebView 尝试加载一个需要通过 HTTP 协议访问的网页时,会出现这个错误。原因是 Android 从 Oreo 开始,强制要求所有应用使用 HTTPS 协议来访问网络资源。
**解决方案:**
1. **使用 HTTPS 协议**: 确保你的网页使用 HTTPS 协议。如果你无法更改网页的协议,可以尝试使用一个代理服务器来转发 HTTP 请求到 HTTPS。
2. **添加清除文本权限**: 在 AndroidManifest.xml 文件中,添加以下代码:
xml<application ... android:usesCleartextTraffic="true">
**注意:**
* 这个解决方案仅适用于 Android8.0(Oreo)以上版本。
* 使用清除文本权限可能会导致安全风险,因为它允许 WebView 访问未经加密的网络资源。
**2. net:ERR_CACHE_MISS**
这个错误通常出现在 WebView 中,当尝试缓存一个网页时,出现了问题。原因可能是由于 WebView 的缓存机制不正确或网页本身的问题。
**解决方案:**
1. **检查 WebView 缓存设置**: 确保 WebView 缓存设置正确。如果你使用的是 Flutter WebView,尝试在 AndroidManifest.xml 文件中添加以下代码:
xml<application ... android:hardwareAccelerated="true">
2. **清除缓存**: 尝试清除 WebView 的缓存。可以通过以下代码来实现:
dartimport 'package:flutter/material.dart'; import 'package:flutter_webview/flutter_webview.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar( title: Text('WebView Demo'), ), body: Center( child: ElevatedButton( onPressed: () async { await FlutterWebview.loadUrl( ' /> cacheMode: CacheMode.LOAD_CACHE, ); }, child: Text('Load URL'), ), ), ), ); } }
**注意:**
* 这个解决方案仅适用于 WebView 缓存问题。
* 使用清除缓存可能会导致性能问题,因为它需要重新加载网页。
总之,ERR_CLEARTEXT_NOT_PERMITTED 和 net:ERR_CACHE_MISS 是两个常见的错误,在 Flutter Android WebView 中使用时。通过检查安全策略、添加清除文本权限和检查 WebView 缓存设置,可以解决这些问题。