无法使用脚本 (localhost:3000 firebase-messaging-sw.js)

问题描述

我在 reactjs 中创建了一个聊天应用程序,我需要在我的应用程序中执行推送通知服务..我遇到了这种类型的错误

Uncaught (in promise) TypeError: Failed to register a ServiceWorker for scope ('https://6bd3f14892f0.ngrok.io/') with script ('https://6bd3f14892f0.ngrok.io/firebase-messaging-sw .js'):ServiceWorker 脚本评估失败 src/chatroom.js

令牌生成错误 FirebaseError: Messaging: 我们无法注册认的 Service Worker。无法使用脚本 ('https://6bd3f14892f0.ngrok.io/firebase-messaging-sw. js'): ServiceWorker 脚本评估失败 (messaging/Failed-service-worker-registration)。

        const fetchData = async () => {
            setNickname(localStorage.getItem('nickname'));
            setRoomname(room);
            firebase.database().ref('roomusers/').orderByChild('roomname').equalTo(roomname).on('value',(resp2) => {
              setUsers([]);
              const roomusers = snapshottoArray(resp2);
              setUsers(roomusers.filter(x => x.status === 'online'));
            });
            //push notifications
            const messaging = firebase.messaging();
            if('serviceWorker' in navigator) { 
              navigator.serviceWorker.register('../firebase-messaging-sw.js')
            .then(function(registration) {
             console.log("Service Worker Registered");
            messaging.useServiceWorker(registration);  
              }); 
              }
  
            messaging.requestPermission()
            .then(function(){
              console.log('have permission')
              return messaging.getToken()
            }).then(function(token){
              console.log("permisssion to take messaging token",token)
              firebase.database().ref('fcmTokens')
              .child(currentUserKey)
              .set({
                token_id:token,})
            })
            .catch(function(err){
              console.log('Token generate err',err)
            })

        };
        fetchData();
    },[room,roomname]); 

src/chatroom.js 发送消息方法

const submitMessage = (e) => {
        e.preventDefault();
        const chat = newchat;
        chat.userId = currentUserKey
        chat.roomname = roomname;
        chat.nickname = nickname;
        chat.reciverSeen= seen;
       // chat.message = message;
        chat.date = Moment(new Date()).format('DD/MM/YYYY HH:mm:ss');
        chat.type = 'message';
        const newMessage = firebase.database().ref('chats/').push(chat,function(error){
          if (error) alert(error)
          else{
            console.log('chat',chat)
            //message notification against chatroom name
            firebase.database().ref('fcmTokens').child(friend_id).once('value').then(function(data){
              console.log('data by fcmTokens',data)

              fetch(url,{
                method: 'POST',headers: { 
                    'Content-Type': 'application/json','Authorization': 'key=BKSCGHa6iDpVnw4wPV8P1TFTY3w5QsVD48_1B57B91OChWmur7W9xcM402xuuuyVUGhTHpRAGjtXx1DdeQfpuzs'                     // 'Authorization': 'key=AAAAEaqdjJo:APA91bGZwboF7P9dX3XSmoOXUKQHMslGryM8pkwPJEdffmjIYpikaxzoDAEHVOEvv5mPxTCdOG6ohrW7YSB2Kpi2XoAaHr8EJNf2SbNr_3ST1nzv9pfT95lmsnMcGHF9gThbM8a7bICk'
                },body: JSON.stringify({ 
                  'to': data.val().token_id,// 'data': {'message': newMessage}//.substring(0,30)}
                 })
              })
              .then(res => {
                res.json()
                console.log('res Success:',res);

              })
              .then(data => {
                console.log('Success:',data);
              })
              .catch((error) => {
                console.error('Error:',error);
              });
              
              
            })
          }

          }
        );

        newMessage.set(chat);
        setSeen(true)
        //setMessage()
        setNewchat({ roomname: '',nickname: '',message: '',date: '',type: '',reciverSeen:false});
    };

它导致服务工作者错误

enter image description here

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)