Google Chrome: DOMException: ошибка регистрации-манифест пуст или отсутствует
Я пытаюсь реализовать Push-уведомления на своем веб-сайте (с помощью Pushpad). Поэтому я создал "манифест.в JSON" следующего содержания:
{
"gcm_sender_id": "my_gcm_sender_id",
"gcm_user_visible_only": true
}
конечно, я создал действительную учетную запись GCM и имею идентификатор отправителя
ставлю манифест.в JSON в мой корневой каталог, и я также добавил эту строку в мой .в PHP:
<link rel="manifest" href="/manifest.json">
используя Firefox все работает нормально и я могу отправка и получение push-уведомлений (поэтому я думаю, что манифест-include работает нормально), но Chrome не будет работать...
консоль показывает следующую ошибку:
Uncaught (in promise) DOMException: Registration failed - manifest empty or missing
Я долго искал Google и пробовал все, что нашел, но ничего не работает.
что я пробовал:
- создал манифест.в JSON С "редактором" и сохранил его как тип Все Типы (так что никаких скрытых .txt - file), а также с UTF-8-кодирования.
- перезапущен Chrome
- очистил кэш браузера, история и т. д.
Я действительно надеюсь, что кто-то может мне помочь.
5 ответов
для меня это был редирект. The manifest.json
должен возвращать код состояния 200 (должен быть непосредственно доступен с сервера), без каких-либо перенаправлений.
Вы можете проверить ответ через
wget --max-redirect=0 https://example.com/manifest.json
или
curl https://example.com/manifest.json
Я столкнулся с той же проблемой,добавил манифест файл сразу после тега head . что сработало для меня.Ура!
это может быть проблема с областью действия Service Worker. Я столкнулся с аналогичной проблемой, когда я переставил свои файлы / каталоги. Убедитесь, что ваш ув.js находится на том же уровне, что и ваш манифест.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
было интересно, если ваш "манифест".json " является общедоступным ?
Если нет, возможно, вы можете попытаться установить его общедоступным, чтобы увидеть, помогает это или нет.
и кажется, что текущий chrome, при получении "манифеста".json " не будет поставлять печенье.
потому что я не нашел ответа нигде в WWW, но мне удалось заставить его работать через некоторое время, я хочу предоставить свое решение / ответ для других пользователей, у которых, вероятно, такая же проблема:
в файле, где я включил файлы Pushpad, я написал PHP-код перед <head>
-Tag для включения некоторых файлов, например, для подключения к базе данных. После того, как я переместил PHP-код ниже <head>
-Tag все работало нормально.