У меня есть следующий веб-сайт, на котором размещены два PWA.
www.xy.com/z
У меня есть PWA A , размещенный на
www.xy.com/z/a
и PWA B , размещенные на
www.xy.com/z/b
Я зарегистрировал работника службы для PWA A из источника www.xy.com/z/a
, как это.
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('/z/a/sw.js', {scope: '/'}).then(function (registration) {
console.log('Service worker registration succeeded:', registration);
}).catch(function (error) {
console.log('Service worker registration failed:', error);
});
} else {
console.log('Service workers are not supported.');
}
Я регистрирую работника службы для PWA B из источника www.xy.com/z/b
таким же образом
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('/z/b/sw.js', {scope: '/'}).then(function (registration) {
console.log('Service worker registration succeeded:', registration);
}).catch(function (error) {
console.log('Service worker registration failed:', error);
});
} else {
console.log('Service workers are not supported.');
}
Что касается регистрации сервисных работников и перенаправления на правильную start_urls, все вроде бы хорошо. Оба PWA автоматически запрашивают A2HS и устанавливаются в раздел приложений устройства. Проблема заключается в том, что PWA A и B имеют доступ к общему контенту на www.xy.com/z/
. Когда их служащие обслуживают контент, выходящий за рамки www.xy.com/z/
, я получаю нежелательный URL-адрес браузера, отображаемый в верхней части PWA.
Я ожидал, что смогу это исправить, добавив Service-Worker-Allowed в мой web.config, чтобы указать, что эти работники службы могут обслуживать контент вне своей области.
<location path="z/a/sw.js">
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Service-Worker-Allowed" value="/" />
</customHeaders>
</httpProtocol>
</system.webServer>
</location>
<location path="z/b/sw.js">
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Service-Worker-Allowed" value="/" />
</customHeaders>
</httpProtocol>
</system.webServer>
</location>
Могу ли я удалить URL-адрес браузера, отображаемый при перенаправлении на контент вне контекста (того же домена), используя Service-Worker-Allowed
, или я неправильно понял это?
Edit:
Я подтвердил, что Service-Worker-Allowed
добавлено в заголовок с помощью инструментов chrome, хотя мы знали, что это произошло из-за внезапной регистрации работника службы, выходящего за рамки области охвата.
Android
- Samsung Internet (9.2.10.15) работает как положено. Не показывает URL.
- Отображение URL браузера Chrome (74.0.3729.157) в PWA
IOS
- Safari (IOS 12.3.1) URL отображается в PWA с кнопкой 'done' .
- Как ни странно в Safari, если я закомментирую работника сервиса и добавлю на главный экран, я не получаю URL.