首页 > 解决方案 > 无法使用不受支持的 MIME 类型注册 Service Worker

问题描述

我们正在尝试将我们的应用程序(基于 Javascript 运行,无反应,无角度)与 firebase 集成,以支持我们设备上的推送通知。但是当我们尝试注册服务工作者时,我们得到了“不支持的 MIME 类型”。

下面是代码。

索引.html:

<script src="https://www.gstatic.com/firebasejs/5.9.4/firebase.js"></script>
<script src="https://www.gstatic.com/firebasejs/5.9.4/firebase-app.js"></script>
<script src="https://www.gstatic.com/firebasejs/5.9.4/firebase-messaging.js"></script>

var config = {
      messagingSenderId: "1234567890"
};

firebase.initializeApp(config);

navigator.serviceWorker.register('./firebase-messaging-sw.js')
.then(function (registration) {
    var messaging = firebase.messaging();

    messaging.requestPermission().then(function () {
        console.log('Notification Permission granted');
        messaging.getToken().then(function (currentToken) {
            console.log('Firebase token : ', currentToken);
        });
    }).catch(function(error) {
        console.log('Push Message is disallowed');
    });

    messaging.onMessage(function(payload) {
        console.log('Message received. ', payload);
     });
 }, err => {
        console.log('Error while registering', err);
 })

firebase-messaging-sw.js:

if('function' === typeof importScripts) {
    importScripts('https://www.gstatic.com/firebasejs/5.9.4/firebase-app.js')
    importScripts('https://www.gstatic.com/firebasejs/5.9.4/firebase-messaging.js')

    var firebaseConfig = {
        apiKey: "sdsd",
        authDomain: "sdsd",
        databaseURL: "sdsd",
        projectId: "sdsd",
        storageBucket: "sdsd",
        messagingSenderId: "1234567890",
        appId: "sdsd"
    };

    var app = firebase.initializeApp(firebaseConfig);
    const messaging = firebase.messaging();

    messaging.setBackgroundMessageHandler(function (payload) {
        return self.registration.showNotification("", {body: payload.data.status});
    });
}

index.html、firebase-messaging-sw.js、manifest.json 都在同一个目录下。但 index.html 无法注册服务工作者,我收到“不支持的 MIME 类型”错误。

我看到了一些关于这个错误的帖子,但所有这些帖子都与 react.js 相关,如下所示。

但是我们没有使用 react.js 将 firebase-messaging-sw.js 放在公共目录中。谁能告诉我将文件firebase-messaging-sw.js和manifest.json放在哪里,如何从index.html中的navigator.serviceWorker.register()引用文件来解决这个问题。

标签: javascriptfirebasefirebase-cloud-messaging

解决方案


推荐阅读