Как установить работника службы на один фиксированный корень

Нужна ваша помощь, пожалуйста. Я хочу использовать веб-стартовый набор на собственной сборке php mvc framework. Частью веб-стартового комплекта является использование сервисного работника.

В моей корневой папке (в моем случае это называется public) у меня есть файл сервисного работника, и я регистрирую его, как реорганизовать, почему так:

if ('serviceWorker' in navigator &&
(window.location.protocol === 'https:' || isLocalhost)) {
navigator.serviceWorker.register('service-worker.js')
.then(function(registration) {
....

Если я пытаюсь вызвать корневую страницу (index.php), она работает хорошо. Но если я попытаюсь вызвать любой маршрут, сервисный работник будет вызван дважды, и один из них выдаст мне ошибку, а второй работает нормально. Я обнаружил, что для первой попытки с выданной ошибкой просто добавьте service-worker.js в путь моего контроллера.

Например, если я пытаюсь открыть mydomain / controller, я получаю сообщение об ошибке, которое mydomain / controller / service-worker.js не может быть найдено. Конечно, есть инстанс любой.

Есть у кого из вас идея, как установить, что сервис-работник будет вызываться только в корне ??

Надеюсь, вы можете помочь и большое спасибо

0

Решение

Проблема исходит отсюда:

navigator.serviceWorker.register('service-worker.js')

Вы говорите браузеру, чтобы получить файл service-worker.js но без определения какой-либо папки. Это заставит браузер искать файл по пути относительно текущего URL. Когда вы находитесь на domain.com/, относительный путь становится domain.com/service-worker.js, но когда вы находитесь на domain.com/controller, относительный путь становится domain.com/controller/service-worker.js.

Чтобы обойти это, вы можете использовать базовый тег

<base href="domain.com"/>

Это скажет браузеру, что любой относительный путь должен быть относительно этого пути вместо текущего пути.

Другой способ также может быть просто использовать абсолютный путь, чтобы указать на ваш service-worker.js

navigator.serviceWorker.register('/service-worker.js');
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]