Использование «Service-Worker-Allowed» в Asp.net Web.Config (нежелательный URL в верхней части PWA) - PullRequest
4 голосов
/ 05 июня 2019

У меня есть следующий веб-сайт, на котором размещены два 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.
...