代码之家  ›  专栏  ›  技术社区  ›  patrick

navigator.serviceworker.controller仅在webroot中工作

  •  0
  • patrick  · 技术社区  · 6 年前

    我想得到一个 ServiceWorker 从名为 appdashboard …ServiceWorker安装、运行并从中可见 chrome://serviceworker-internals/ 但它的 Navigator.serviceWorker.controller 是空的,所以我无法与它通信。如果我不限制作用域(并将我的ServiceWorker文件移到webroot),它就可以正常工作。

       const serviceWorker = navigator
            .serviceWorker
            .register('appdashboard/dashboard_serviceworker.js', { scope: 'http://localhost/appdashboard/' })
            .then((swReg) => {
                console.log('[Service Worker (Dashboard)] service worker is registered', swReg);
                swRegistration = swReg;
    
                if (navigator.serviceWorker.controller != null) {
                    console.log("controller is working")
                }
    
                if (navigator.serviceWorker.controller == null) {
                    console.log("controller is NULL!") // <<<< its null :(
                }
        })
    

    我简化了我的生活 serviceworker 尽可能多地诊断该问题,即使使用此裸机辅助,控制器也是空的。

    self.addEventListener('message', function (event) { 
        console.log('got message')
    });
    
    
    self.addEventListener('activate', function (event) {
        console.log('serviceworker activate')
        event.waitUntil(self.clients.claim()); // Become available to all pages
    });
    
    
    self.addEventListener('install', function (event) {
        console.log('install')
    });
    
    self.addEventListener('fetch', function (event) {
        console.log('fetch')
    });
    
    self.addEventListener('push', (event) => {
        console.log('received push')
    });
    
    self.addEventListener('notificationclick', function (event) {
        console.log('registered notification click!')
    });
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   patrick    6 年前

    我在用 MVC 路由以便我的URL路径 localhost/dashboard 但我的文件结构是 /appdashboard/ ,现在我提供了一个index.html, /AppDaseBoo/ Webroot和控制器初始化。

    这条线使我走上了正确的道路。

    请记住,包含范围时,使用页面的位置作为 底座。或者,如果此代码包含在 example.com/product/description.html,'/'的范围意味着 服务人员仅适用于以下资源 示例.com/product。

    推荐文章