Сервисный работник в подкаталоге, но я хочу, чтобы область действия была root - PullRequest
0 голосов
/ 27 января 2019

У меня есть сервисный работник js в подкаталоге (/ data / system /), но я хочу, чтобы его область видимости была из корневого каталога.Следующий код:

    if ('serviceWorker' in navigator) {
      navigator.serviceWorker.register('/data/system/firebase-messaging-sw.js', { scope: '/' })
      .then(function(reg) {
        // registration worked
        console.log('Registration succeeded.');
      }).catch(function(error) {
        // registration failed
        console.log('Registration failed with ' + error);
      });
    }

печатает ошибку:

The path of the provided scope ('/') is not under the max scope allowed ('/data/system/'). Adjust the scope, move the Service Worker script, or use the Service-Worker-Allowed HTTP header to allow the scope.

Как мне расширить область, чтобы она работала?Как установить HTTP-заголовок set-Worker-Allowed?У меня есть базовое приложение PHP, нет Angular, нет React, ничего особенного.Все темы, которые я искал, были для этих систем.

1 Ответ

0 голосов
/ 02 февраля 2019

Итак, ответ довольно сложный.

Во-первых, я заметил, что код, который я предоставил ранее, регистрирует сервисного работника 2 раза - сначала он ищет корневого сервисного работника, а второй - каталог Iуказано.Проблема заключается в самом firebase, потому что он строго ищет работника корневого сервиса.Поэтому мне пришлось скачать firebase.js и заново его обработать, чтобы он искал только мой каталог.(для всех, кто интересуется сборкой 3.6.1-rc.3, строка 525 в "navigator.serviceWorker.register" просто измените URL на свой желаемый) И используйте локальную копию firebase вместо официальной.

Во-вторых,Я должен был добавить .htaccess к работнику службы каталогов со следующими строками:

<Files "firebase-messaging-sw.js">
Header Set Service-Worker-allowed "/"
</Files>

Просто оставить его там для тех, кто ищет то же самое.

...