Google Chrome: DOMException: 注册失败 - 清单为空或丢失
Google Chrome: DOMException: Registration failed - manifest empty or missing
我正在尝试在我的网站上实施推送通知(使用 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">
使用 Firefox 一切正常,我可以发送和接收推送通知(所以我认为清单包含工作正常),但是 Chrome 不行...
控制台显示以下错误:
Uncaught (in promise) DOMException: Registration failed - manifest empty or missing
我搜索了 Google 很长时间并尝试了我找到的所有东西,但没有任何效果。
我尝试了什么:
- 使用 "Editor" 创建了 manifest.json 并将其保存为 All Types 类型(因此没有隐藏 .txt-file) 以及 UTF-8-Encoding.
- 重新启动Chrome
- 清除了Chrome的缓存、历史等
我真的希望有人能帮助我。
想知道您的 "manifest.json" 是否可以 public 访问?
如果不行,也许您可以尝试将其设置为 public 可访问,看看是否有帮助。
并且当前的 chrome 似乎在获取 "manifest.json" 时不会提供 cookie。
对我来说这是一个重定向。 manifest.json
必须 return 200 状态码(必须直接从服务器获得),没有任何重定向。
您可以通过
查看回复
wget --max-redirect=0 https://example.com/manifest.json
或
curl https://example.com/manifest.json
我遇到了同样的问题,在 head 标签之后添加了清单文件。这适用于 me.Cheers!
这可能是您的 Service Worker 范围的问题。当我养 运行 我的 files/directories 时,我 运行 遇到了类似的问题。确保您的 sw.js 与您的 manifest.json 处于同一级别,否则服务工作人员将无法找到您的清单。尝试将它们都放在目录的根目录中。或者,您可以通过将服务工作者的 scope
添加到 serviceWorker.register()
:
来指定它
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);
});
}
在此处阅读更多内容:
https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API/Using_Service_Workers
因为我没有在 WWW 的任何地方找到答案,但在一段时间后设法让它工作我想为可能有同样问题的其他用户提供我的 solution/answer:
在我包含 Pushpad 文件的文件中,我在 <head>
-Tag 之前写了一些 PHP-代码以包含一些文件,例如用于数据库连接。在我将 PHP-代码移至 <head>
-标签下方后,一切正常。
似乎有三种方法可以修复此错误:
a) "manifest.json" 文件没有重定向。
b) 将 link 添加到此文件的标签顶部。
c) 确保在此之前没有其他清单文件,因为网络推送脚本似乎会尝试导入第一个清单文件,并且 return 由于数据错误而出错。
这三个我都试过了,最后强制 Chrome 表现出来。
添加以下块为我解决了这个问题:
self.addEventListener('push', (event) => {
const title = 'Get Started With Workbox';
const options = {
body: event.data.text()
};
event.waitUntil(self.registration.showNotification(title, options));
});
我正在尝试在我的网站上实施推送通知(使用 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">
使用 Firefox 一切正常,我可以发送和接收推送通知(所以我认为清单包含工作正常),但是 Chrome 不行...
控制台显示以下错误:
Uncaught (in promise) DOMException: Registration failed - manifest empty or missing
我搜索了 Google 很长时间并尝试了我找到的所有东西,但没有任何效果。
我尝试了什么:
- 使用 "Editor" 创建了 manifest.json 并将其保存为 All Types 类型(因此没有隐藏 .txt-file) 以及 UTF-8-Encoding.
- 重新启动Chrome
- 清除了Chrome的缓存、历史等
我真的希望有人能帮助我。
想知道您的 "manifest.json" 是否可以 public 访问?
如果不行,也许您可以尝试将其设置为 public 可访问,看看是否有帮助。
并且当前的 chrome 似乎在获取 "manifest.json" 时不会提供 cookie。
对我来说这是一个重定向。 manifest.json
必须 return 200 状态码(必须直接从服务器获得),没有任何重定向。
您可以通过
wget --max-redirect=0 https://example.com/manifest.json
或
curl https://example.com/manifest.json
我遇到了同样的问题,在 head 标签之后添加了清单文件。这适用于 me.Cheers!
这可能是您的 Service Worker 范围的问题。当我养 运行 我的 files/directories 时,我 运行 遇到了类似的问题。确保您的 sw.js 与您的 manifest.json 处于同一级别,否则服务工作人员将无法找到您的清单。尝试将它们都放在目录的根目录中。或者,您可以通过将服务工作者的 scope
添加到 serviceWorker.register()
:
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);
});
}
在此处阅读更多内容: https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API/Using_Service_Workers
因为我没有在 WWW 的任何地方找到答案,但在一段时间后设法让它工作我想为可能有同样问题的其他用户提供我的 solution/answer:
在我包含 Pushpad 文件的文件中,我在 <head>
-Tag 之前写了一些 PHP-代码以包含一些文件,例如用于数据库连接。在我将 PHP-代码移至 <head>
-标签下方后,一切正常。
似乎有三种方法可以修复此错误: a) "manifest.json" 文件没有重定向。 b) 将 link 添加到此文件的标签顶部。 c) 确保在此之前没有其他清单文件,因为网络推送脚本似乎会尝试导入第一个清单文件,并且 return 由于数据错误而出错。 这三个我都试过了,最后强制 Chrome 表现出来。
添加以下块为我解决了这个问题:
self.addEventListener('push', (event) => {
const title = 'Get Started With Workbox';
const options = {
body: event.data.text()
};
event.waitUntil(self.registration.showNotification(title, options));
});