Google chrome Google Chrome:DomeException:注册失败-清单为空或缺失
我正在尝试在我的网站上实现推送通知(使用Pushpad)。因此,我创建了一个包含以下内容的“manifest.json”: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
{
"gcm_sender_id": "my_gcm_sender_id",
"gcm_user_visible_only": true
}
当然,我创建了一个有效的GCM帐户,并且有一个发件人id
我将manifest.json放在我的根目录中,并将这一行添加到我的index.php:
<link rel="manifest" href="/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没有查找清单文件,这就是它工作的原因。您是否尝试过在地址栏中键入urlhttps://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);
});
}