我的 flutter web 应用程序无法启动,我在浏览器控制台中看到以下错误:
![enter image description here](https://i.stack.imgur.com/pGZpP.png)
仅当部署在 vercel 上时才会出现此行为。在 firebase 托管上部署时,我没有收到此错误。
此外,此错误仅发生在嵌套路由中。当我打开 URL 中没有子路径的已部署应用程序时,它会起作用。
该错误一定发生在loadEntrypoint
功能
<script>
window.addEventListener('load', function (ev) {
console.log("LOAD!");
// Download main.dart.js
_flutter.loader.loadEntrypoint({
serviceWorker: {
serviceWorkerVersion: serviceWorkerVersion,
}
}).then(function (engineInitializer) {
console.log("INIT");
return engineInitializer.initializeEngine();
}).then(function (appRunner) {
console.log("RUN");
return appRunner.runApp();
});
});
</script>
有趣的是这里说Failed to register a ServiceWorker for scope ('https://domainname.net/home/')
即使我加载页面https://domainname.net/home/questionnaire
。一般来说,我希望它会在以下位置注册 ServiceWorker:https://domainname.net
但我对 ServiceWorkers 不太了解......
我对此特别困惑,因为这只发生在 vercel 上,但错误发生在web/index.js
,它假设我的托管提供商不应该影响这种行为?
有任何想法吗?
- 这是由这个错误引起的:https://github.com/flutter/flutter/issues/116360
- 它已经在 master 中修复了:https://github.com/flutter/flutter/pull/118684
- 不幸的是,该修复尚未进入稳定渠道(截至 2022 年 3 月 2 日),但有一个挑选请求.
临时解决方法: (ref)
将这两行添加到您的index.html
:
<script>
window.addEventListener('load', function(ev) {
// Download main.dart.js
_flutter.loader.loadEntrypoint({
entrypointUrl: "/main.dart.js", // <-- THIS LINE
serviceWorker: {
serviceWorkerVersion: serviceWorkerVersion,
serviceWorkerUrl: "/flutter_service_worker.js?v=", // <-- THIS LINE
},
onEntrypointLoaded: function(engineInitializer) {
engineInitializer.initializeEngine().then(function(appRunner) {
appRunner.runApp();
});
}
});
});
</script>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)