Я создаю PWA (Progressive Web App) и регистрирую своего сервисного работника в моем представлении:
if('serviceWorker' in navigator) {
navigator.serviceWorker.register('@Url.Content("~/sw.js")', { scope: '@Url.Content("~/")' })
.then(function(registration) {
console.log('G081 Service Worker Registered');
});
navigator.serviceWorker.ready.then(function(registration) {
console.log('G081 Service Worker Ready');
});
}
И одна из первых вещей, которые я делаю в своем сервисном работнике, это импорт idb-keyval библиотека, следующим образом:
(function () {
"use strict";
self.importScripts("/3971/lib/idb-keyval/idb-keyval-iife.min.js");
}());
Все хорошо с этим.Это зарегистрировано и работает.Однако, вы заметите, что в моей функции self.importScripts
(в моем сервисном работнике) я жестко кодирую часть пути ("3971/"
).Я делаю это из-за стратегии ветвления, которую мы используем на моей работе.Каждый филиал получает свой сайт на нашем тестовом сервере (в моем случае это 3971).В результате я должен быть в состоянии сказать моему сервисному работнику искать в подпапке 3971 файл javascript idb-keyval.Если я этого не скажу, он смотрит в родительскую папку и не находит его.И это снова изменится, когда мы начнем производство.Затем приложение будет находиться в корневом каталоге сайта, и ему нужно будет искать файл javascript без подпапки «3971».
Я назову это папкой моей области видимости.По сути, мне нужен способ сообщить моему сервисному работнику, какую папку области использовать для ресурсов.Я делаю что-то похожее на моей странице просмотра, как вы видите выше, где я использую Razor для сериализации папки своей области видимости для регистрации моего сервисного работника:
navigator.serviceWorker.register('@Url.Content("~/sw.js")', { scope: '@Url.Content("~/")' })
Визуализация:
navigator.serviceWorker.register('/3971/sw.js', { scope: '/3971/' }) // MY DYNAMIC BRANCH
// and ...
navigator.serviceWorker.register('/sw.js', { scope: '/' }) // PRODUCTION
Есть ли способ, которым я могу передать параметр своему сервисному работнику, чтобы он знал, какую папку области он использует? Например, я могу сделать что-то вроде этого:
navigator.serviceWorker.register('/3971/sw.js?scope=%2F3971%2F', { scope: '/3971/' }) // MY DYNAMIC BRANCH
А потом в моем сервисном работнике использовать этот параметр и использовать его для получения моих ресурсов? Примерно так:
(function () {
"use strict";
self.importScripts(param['scope'] + "lib/idb-keyval/idb-keyval-iife.min.js");
}());