脚本资源位于重定向后面,不允许重定向

时间:2017-04-10 11:02:55

标签: javascript firebase firebase-cloud-messaging

我正在实施firebase消息,但我在chrome中的控制台上出现错误。

  

脚本资源位于重定向后面,不允许重定向。   /firebase-messaging-sw.js无法加载资源:net :: ERR_UNSAFE_REDIRECT

文件/ firebase-messaging-sw.js位于公共文件夹中,我正在使用这样的FCM安装https://github.com/firebase/quickstart-js/tree/master/messaging

但授权链接是https://09029e3f.ngrok.io/admin/pt/settings/notifications之类的链接。 但主要网站是在main.domain.com

2 个答案:

答案 0 :(得分:2)

Firebase答案及其工作

默认情况下,服务工作者脚本(firebase-messaging-sw.js)应位于应用程序的绝对路径上。使用快速入门项目,位置将为http://localhost:5000/firebase-messaging-sw.js

由于您使用不同的服务器进行静态文件存储,因此服务工作者脚本位置可能不相同或不同。有了这个,我们需要更新服务工作者注册代码实现并从不同的位置调用服务工作者脚本。

查找服务工作者脚本的静态位置。在我的例子中,它是http://localhost:5000/sw/firebase-messaging.sw.js,因为我将服务工作者脚本位置移动到sw文件夹中。要验证它是否可访问,请尝试在浏览器地址栏中输入URL,并显示服务工作者脚本代码。 从https://www.gstatic.com/firebasejs/ / firebase.js本地下载firebase.js脚本,并在需要显示通知的网页上将其命名为/firebase.js">。

更新firebase-messaging.js脚本。找到关键字firebase-messaging-sw.js,然后将路径添加为前缀。就我而言,它是http://localhost:5000/sw/firebase-messaging-sw.jshttp://localhost:5000/sw/firebase-cloud-messaging-push-scope

非常感谢firebase

答案 1 :(得分:2)

您可以通过使用服务工作人员手动加载firebase-messaging-sw.js来解决此问题 假设您有2个文件:index.htmlfirebase-message-sw.js。他们在同一个地方。

1.在index.html中,您加载firebase.js并初始化您的firebase应用:

<script src="https://www.gstatic.com/firebasejs/4.3.1/firebase.js"></script>
<script>
  var var config = {
        apiKey: YOUR_API_KEY,
        messagingSenderId: YOUR_SENDER_ID
    };
    firebase.initializeApp(config);
    navigator.serviceWorker.register('/firebase-messaging-sw.js')
      .then(function (registration) {
          messaging = firebase.messaging();

         //request permission for Push Message.
          messaging.requestPermission().then(function () {
              console.log('grant');

              messaging.getToken().then(function (currentToken) {
                 console.log('current token', currentToken);
            });
          }).catch(function(error) {
               console.log('Push Message is disallowed');
          })
      })
</script>

2。实施firebase-messaing-sw.js

importScripts('https://www.gstatic.com/firebasejs/4.3.1/firebase-app.js');
importScripts('https://www.gstatic.com/firebasejs/4.3.1/firebase-messaging.js');
var config = {
    messagingSenderId: YOUR_SENDER_ID
};
firebase.initializeApp(config);
const messaging = firebase.messaging();

messaging.setBackgroundMessageHandler(function (payload) {
    console.log('[firebase-messaging-sw.js] Received background message ', payload);
    // Customize notification here
    const notificationTitle = 'Background Message Title';
    const notificationOptions = {
        body: 'Background Message body.',
        icon: '/firebase-logo.png'
    };

    return self.registration.showNotification(notificationTitle,
        notificationOptions);
});

完成!