Flutter Web中window.flutterConfiguration配置失效,仍从谷歌CDN拉取CanvasKit资源的问题求助
Flutter Web中window.flutterConfiguration配置失效,仍从谷歌CDN拉取CanvasKit资源的问题求助
大家好,我最近在做一个只能离线运行的Flutter Web应用,卡到一个问题好久没解决,来求助各位大佬!
问题背景
我的应用完全不需要联网,所以编译时特意用了离线优先的PWA策略:
flutter build web --pwa-strategy=offline-first
但编译部署后发现,应用还是会自动从谷歌CDN拉取canvaskit.wasm和canvaskit.js,发起请求的是flutter_bootstrap.js,根本没法离线运行。
我已经尝试过的方法
查了相关方案后,我在web/index.html里添加了指定CanvasKit本地路径的配置脚本,特意放在了flutter_bootstrap.js引入之前:
<script> window.flutterConfiguration = { canvasKitBaseUrl: "/canvaskit/" }; </script>
而且我确认了两个关键点:
build/web目录下确实有完整的canvaskit文件夹,里面的资源一个不少- 编译后的
index.html里也完整保留了这段配置代码
但问题依然存在,应用还是顽固地去在线CDN拉取资源。
额外的debug模式问题
更头疼的是,在debug模式下添加这段配置后,应用直接启动失败,会尝试打开一个叫web_entrypoint.dart的文件,然后debugger直接停住,根本跑不起来。
我的Flutter环境信息
Flutter 3.32.4 • channel stable • https://github.com/flutter/flutter.git Framework • revision 6fba2447e9 (7天前) • 2025-06-12 19:03:56 -0700 Engine • revision 8cd19e509d (7天前) • 2025-06-12 16:30:12 -0700 Tools • Dart 3.8.1 • DevTools 2.45.1
附上我的web/index.html完整代码
<!DOCTYPE html> <html> <head> <!-- If you are serving your web app in a path other than the root, change the href value below to reflect the base path you are serving from. The path provided below has to start and end with a slash "/" in order for it to work correctly. For more details: * https://developer.mozilla.org/en-US/docs/Web/HTML/Element/base This is a placeholder for base href that will be replaced by the value of the `--base-href` argument provided to `flutter build`. --> <base href="$FLUTTER_BASE_HREF"> <meta charset="UTF-8"> <meta content="IE=Edge" http-equiv="X-UA-Compatible"> <meta name="description" content="A new Flutter project."> <!-- iOS meta tags & icons --> <meta name="mobile-web-app-capable" content="yes"> <meta name="apple-mobile-web-app-status-bar-style" content="black"> <meta name="apple-mobile-web-app-title" content="scaffold"> <link rel="apple-touch-icon" href="icons/Icon-192.png"> <!-- Favicon --> <link rel="icon" type="image/png" href="favicon.png" /> <title>scaffold</title> <link rel="manifest" href="manifest.json"> </head> <body> <script> window.flutterConfiguration = { canvasKitBaseUrl: "/canvaskit/" }; </script> <script src="flutter_bootstrap.js" async></script> </body> </html>
我已经核对了各种细节,但就是搞不懂为什么配置不生效,debug模式还崩了。有没有大佬能帮我看看哪里漏了什么步骤或者配置吗?
内容来源于stack exchange
相关产品推荐
相关产品推荐

