0

我想跟踪用户在我的PWA中的活动。是否有可能发送一个请求到我的服务器上每个网站的印象与当前的URI?如何跟踪服务人员中的当前URL更改?

场景:用户使用当前URI打开PWA - >请求。 用户打开一个子页面 - >用当前URI发送请求。

我的例子服务worker.js:

var cacheName = 'weatherPWA-step-6-2'; 
var filesToCache = [ 
    '/', 
    '/index.html', 
    '/scripts/app.js', 
    '/styles/inline.css', 
    '/images/clear.png', 
    '/images/cloudy-scattered-showers.png', 
    '/images/cloudy.png', 
    '/images/fog.png', 
    '/images/ic_add_white_24px.svg', 
    '/images/ic_refresh_white_24px.svg', 
    '/images/partly-cloudy.png', 
    '/images/rain.png', 
    '/images/scattered-showers.png', 
    '/images/sleet.png', 
    '/images/snow.png', 
    '/images/thunderstorm.png', 
    '/images/wind.png' 
]; 

self.addEventListener('install', function(e) { 
    console.log('[ServiceWorker] Install'); 
    e.waitUntil(
    caches.open(cacheName).then(function(cache) { 
     console.log('[ServiceWorker] Caching app shell'); 
     return cache.addAll(filesToCache); 
    }) 
); 
}); 

self.addEventListener('activate', function(e) { 
    console.log('[ServiceWorker] Activate'); 
    e.waitUntil(
    caches.keys().then(function(keyList) { 
     return Promise.all(keyList.map(function(key) { 
     if (key !== cacheName) { 
      console.log('[ServiceWorker] Removing old cache', key); 
      return caches.delete(key); 
     } 
     })); 
    }) 
); 
    return self.clients.claim(); 
}); 

self.addEventListener('fetch', function(e) { 
    console.log('[ServiceWorker] Fetch', e.request.url); 
    console.log("Url", Client.url); 
    e.respondWith(
    caches.match(e.request).then(function(response) { 
     return response || fetch(e.request); 
    }) 
); 
}); 
+0

你可以听窗口上的'hashchange'事件并做任何你想做的事情。 –

+0

@JPrakash:谢谢! – CYGS

回答

0

这个问题也许应该表述是这样的:

我怎么可以跟踪我的分析包中的网页浏览时,文件被从缓存提供?

这是一个很好的问题,因为您肯定会调整活动。

如果您只根据服务器日志跟踪活动,那么您将需要每次执行一次网络请求。这是一个低效率和老派的IMO。但如果这是你追踪活动的方式,那么就建立一个处理它的方法。您将需要构建一种人造AJAX方式来更新日志。当然,你也可以使用它来保持你的缓存新鲜,在重新验证策略时保持陈旧。

如果您使用的是Google Analytics等服务,那么您将以编程方式触发流量。关于这些服务的好处是你不需要改变任何东西来触发它们的日志记录活动,因为它们是从UI而不是服务器进行测量的。

如果您在消费者脱机时允许进行活动,那么您需要对活动进行排队,并在活动恢复联机后进行重放。这是后台同步API一旦得到广泛支持就会有用的地方。

希望这会有所帮助。让我知道你是否有更多的问题和澄清。