Google chrome Google Chrome:DomeException:注册失败-清单为空或缺失

Google chrome Google Chrome:DomeException:注册失败-清单为空或缺失,google-chrome,push-notification,manifest,web-push,pushpad,Google Chrome,Push Notification,Manifest,Web Push,Pushpad,我正在尝试在我的网站上实现推送通知(使用Pushpad)。因此,我创建了一个包含以下内容的“manifest.json”: { "gcm_sender_id": "my_gcm_sender_id", "gcm_user_visible_only": true } 当然,我创建了一个有效的GCM帐户,并且有一个发件人id 我将manifest.json放在我的根目录中,并将这一行添加到我的index.php: <link rel="manifest" href="/man

我正在尝试在我的网站上实现推送通知(使用Pushpad)。因此,我创建了一个包含以下内容的“manifest.json”

{
    "gcm_sender_id": "my_gcm_sender_id",
    "gcm_user_visible_only": true
}
当然,我创建了一个有效的GCM帐户,并且有一个发件人id

我将manifest.json放在我的根目录中,并将这一行添加到我的index.php

<link rel="manifest" href="/manifest.json">
我在谷歌搜索了很长一段时间,并尝试了我找到的所有东西,但没有任何效果

我尝试的是:

  • 使用“编辑器”创建manifest.json,并将其保存为type All type(因此没有隐藏的.txt文件),还使用UTF-8编码
  • 重新启动的Chrome
  • 清除了Chrome的缓存、历史记录等
  • 我真的希望有人能帮我。

    想知道您的“manifest.json”是否可以公开访问

    如果没有,也许你可以尝试将其设置为公共可访问,看看这是否有帮助


    而且当前的chrome在获取“manifest.json”时似乎不会提供cookies。

    对我来说,这是一个重定向。
    manifest.json
    必须返回一个200状态代码(必须直接从服务器上获得),而不需要任何重定向。 您可以通过以下方式检查响应:

    wget--max重定向=0https://example.com/manifest.json


    curlhttps://example.com/manifest.json

    我面临同样的问题,在head标签后面添加了清单文件。这对我有用。干杯

    这可能是您的服务人员范围的问题。我在重新排列文件/目录时遇到了类似的问题。确保您的sw.js与manifest.json处于同一级别,否则服务人员将无法找到您的清单。尝试将它们都放在目录的根目录中。或者,您可以通过将服务工作者的
    范围添加到
    serviceWorker.register()
    ,来指定服务工作者的
    范围:

    请在此处阅读更多信息:

    因为我在WWW上找不到答案,但经过一段时间后,我终于找到了答案。我想为其他用户提供我的解决方案/答案,他们可能也有同样的问题:


    在包含Pushpad文件的文件中,我在-标记之前编写了一些PHP代码,以包含一些文件,例如用于数据库连接的文件。在我将PHP代码移到-标记下面之后,一切都很好。

    似乎有三种方法可以修复此错误: a) “manifest.json”文件没有重定向。 b) 在标记顶部放置指向此文件的链接。 c) 请确保在此清单文件之前没有其他清单文件,因为web推送脚本似乎会尝试导入第一个清单文件,并返回错误数据导致的错误。
    我已经尝试了这三种方法,并最终强制Chrome进行操作。

    添加以下块为我修复了此问题:

    self.addEventListener('push',(事件)=>{
    const title='getstartedwithworkbox';
    常量选项={
    正文:event.data.text()
    };
    event.waitUntil(self.registration.showNotification(标题、选项));
    });
    
    Firefox可以工作,因为它不需要清单来启用推送。你可以尝试直接在浏览器中加载清单,看看你是否可以访问它吗?是的,当我通过直接链接在浏览器中加载清单时,我可以看到代码。我确认Firefox没有查找清单文件,这就是它工作的原因。您是否尝试过在地址栏中键入url
    https://yourwebsite.com/manifest.json
    并查看是否正确返回?你能提供一个链接到你的网站吗?是的,我输入了那个网址,它工作得很好。我还将一个脚本实现到我的页面的头部部分,该部分由Pushpad提供(用于注册服务人员和Pushpad函数)。当我删除该脚本时,不会出现错误。所以我认为服务人员的注册失败了(?),但我真的不知道为什么。@FabianH。另一个猜测:您确定您在
    manifest.json
    之前有
    /
    ?试着打开Chrome开发者工具的网络标签,看看
    manifest.json
    的请求是否成功完成。这对我来说也很有效,只是我把manifest.json放在了结束标签之前。
    Uncaught (in promise) DOMException: Registration failed - manifest empty or missing
    
    if ('serviceWorker' in navigator) {
      navigator.serviceWorker.register('/sw-test/sw.js', {scope: '/sw-test/'})
      .then(function(reg) {
        // registration worked
        console.log('Registration succeeded. Scope is ' + reg.scope);
      }).catch(function(error) {
        // registration failed
        console.log('Registration failed with ' + error);
      });
    }