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 и пробовал все, что нашел, но ничего не работает.

что я пробовал:

  1. создал манифест.в JSON С "редактором" и сохранил его как тип Все Типы (так что никаких скрытых .txt - file), а также с UTF-8-кодирования.
  2. перезапущен Chrome
  3. очистил кэш браузера, история и т. д.

Я действительно надеюсь, что кто-то может мне помочь.

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 все работало нормально.