javascript - Flutter 无法使用脚本为范围注册 ServiceWorker,该脚本具有不受支持的 MIME 类型
问题描述
我有一个带有 FlutterFire 的功能齐全的 Flutter 应用程序,其中 android 包运行良好,但 Web 客户端在启动时会出现奇怪的错误。我也不能用它调用任何带有flutterfire的firebase函数。(简单的firebase查询就可以了)
启动时或我尝试调用时的错误消息FirebaseFunctions.instance.httpsCallabe('...
:
:1337/dart_sdk.js:7025 Uncaught (in promise) Error: [firebase_messaging/failed-service-worker-registration] Messaging:
We are unable to register the default service worker.
Failed to register a ServiceWorker for scope ('http://localhost:1337/firebase-cloud-messaging-push-scope') with script ('http://localhost:1337/firebase-messaging-sw.js'): The script has an unsupported MIME type ('text/html'). .
at Object.throw_ [as throw] (:1337/dart_sdk.js:5334)
at firebase_messaging_web.FirebaseMessagingWeb.new.getToken (:1337/packages/firebase_messaging_web/firebase_messaging_web.dart.lib.js:112)
at getToken.throw (<anonymous>)
at :1337/dart_sdk.js:39038
at _RootZone.runBinary (:1337/dart_sdk.js:38894)
at _FutureListener.thenAwait.handleError (:1337/dart_sdk.js:33887)
at handleError (:1337/dart_sdk.js:34451)
at Function._propagateToListeners (:1337/dart_sdk.js:34477)
at _Future.new.[_completeError] (:1337/dart_sdk.js:34323)
at async._AsyncCallbackEntry.new.callback (:1337/dart_sdk.js:34362)
at Object._microtaskLoop (:1337/dart_sdk.js:39176)
at _startMicrotaskLoop (:1337/dart_sdk.js:39182)
at :1337/dart_sdk.js:34689
我没有 firebase-messaging-sw.js文件。我只做了文档推荐的https://firebase.flutter.dev/docs/messaging/overview/#5-web-only-add-the-sdk。
我的 index.html:
<!DOCTYPE html>
<html>
<head>
...
<!-- The core Firebase JS SDK is always required and must be listed first -->
<script src="https://www.gstatic.com/firebasejs/7.20.0/firebase-app.js"></script>
<script src="https://www.gstatic.com/firebasejs/7.20.0/firebase-auth.js"></script>
<script src="https://www.gstatic.com/firebasejs/7.20.0/firebase-firestore.js"></script>
<script src="https://www.gstatic.com/firebasejs/7.20.0/firebase-messaging.js"></script>
<script src="https://www.gstatic.com/firebasejs/7.20.0/firebase-functions.js"></script>
<script>
// Your web app's Firebase configuration
var firebaseConfig = {
apiKey: "****",
authDomain: "*****",
databaseURL: "*****",
projectId: "*****",
storageBucket: "*****",
messagingSenderId: "*****",
appId: "*****"
};
// Initialize Firebase
firebase.initializeApp(firebaseConfig);
</script>
</head>
<body>
<script >
if ('serviceWorker' in navigator) {
window.addEventListener('flutter-first-frame', function () {
navigator.serviceWorker.register('flutter_service_worker.js');
});
}
</script>
<script src="main.dart.js" type="application/javascript"></script>
</body>
</html>
颤振医生:
$ flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 2.0.3, on Linux, locale en_US.UTF-8)
解决方案
找到解决方案:https ://stackoverflow.com/a/63800226/3486691
我必须创建文件并提供默认设置,以便应用程序可以正常工作而不会引发错误。
推荐阅读
- sql - SSDT SQL 脚本生成错误
- eclipse - Eclipse 项目文件与以前版本的 Eclipse 兼容吗?
- python - 如何使用 python groupby 从给定的文本文件中拆分测试名称和日志详细信息
- intellij-idea - IntelliJ 的嵌入式终端无法正确加载我的鱼壳配置
- angular - NativeScript - WebView 内的 Angular HTML 组件
- sql - 从字符串转换日期和/或时间时 C# 转换失败
- c++ - 在键盘箭头键上禁用 QSlider 的 valueChanged
- jquery - 嵌入式时间轴中的多个 Twitter 提要不再起作用
- suse - 在 SUSE Linux ESS 12 SP3 上配置 XRDP 时需要帮助
- testing - Jmeter postProcessor 在所有 http 请求完成后仅执行一次