Как зарегистрировать область сервисного работника на один каталог выше, где находится service_worker.js

МОИ каталоги следующие.

public_html/
sw/

«sw/» — это то место, куда я хочу поместить всех сервис-воркеров, но затем у этих сервис-воркеров есть доступ ко всем файлам в «public_html/».

JS

<script>
if ('serviceWorker' in navigator) {
  navigator.serviceWorker.register('sw/notifications.js', { scope: '../sw/' }).then(function(reg) {
    // registration worked
    console.log('Registration succeeded. Scope is ' + reg.scope);
  }).catch(function(error) {
    // registration failed
    console.log('Registration failed with ' + error);
  });
};
</script>

Как мне разрешить такую ​​область действия?


person Relm    schedule 12.02.2016    source источник


Ответы (2)


максимальная область действия сервисного работника — там, где он находится. Это означает, что вы не можете зарегистрировать один сервис-воркер, расположенный по адресу /sw/ в scope: '/public_html/', если вы не включите специальный заголовок Service-Worker-Allowed, установленный для новой максимальной области действия для вашего сервис-воркера.

Подводя итог, если вы можете добавить этот заголовок при обслуживании работника службы, установите его следующим образом:

Service-Worker-Allowed: /public_html/

Если нет, вы должны поместить sw в каком-то месте над областью действия.

person Salva    schedule 15.02.2016
comment
Для любой другой потерянной души, такой как я, которая ищет, где или как добавить этот заголовок, его нужно добавить на серверной части. На веб-сервере, обслуживающем файл сервисного работника, как это демонстрирует этот человек: worker-scope-in-upp/49098917/" title="как именно добавить сервис-воркеру разрешено регистрировать сервис-воркер в upp">stackoverflow.com/questions/49084718/ Это означает, что ваш запрос сервис-воркера должен выглядеть так : medium.com/dev-channel/ - person sgarcia.dev; 08.12.2019

Изменить: как указывает Salva answer, максимальная область должна быть расширена с помощью заголовок Service-Worker-Allowed, чтобы разрешить следующие действия.


Измените свойство scope объекта параметров регистрации (второй параметр navigator.serviceWorker.register()) на URL-адрес, к которому вы хотите привязать сервис-воркера. В вашем случае это может быть ../public_html.

// ...
navigator.serviceWorker.register('sw/notifications.js', { scope: '../public_html/' })
// ...

Этот параметр будет по умолчанию равен ./ (относительно сценария ServiceWorker), если объект параметров не указан или не имеет свойства scope.

Кроме того, установка scope с любым происхождением, кроме текущий источник отклонит обещание регистрации с исключением SecurityError.


Рекомендации:

https://www.w3.org/TR/service-workers/#navigator-service-worker-register

https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerContainer/register#Parameters

person Robert K. Bell    schedule 14.02.2016
comment
Это вызовет ошибку о том, что область выходит за пределы разрешенной области. Вам также необходимо установить заголовок в соответствии с другим ответом. - person Angel Joseph Piscola; 23.06.2017