如何跟踪服务工作者中的当前URL更改?

时间:2017-10-13 11:57:42

标签: javascript service-worker progressive-web-apps service-worker-events

我想跟踪用户在PWA中的活动。是否可以使用当前URI在每个网站展示上向我的服务器发送请求?

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

我的示例service-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);
    })
  );
});

1 个答案:

答案 0 :(得分:0)

这个问题应该用这样的措辞:

如何在从缓存提供文件时跟踪分析包中的网页浏览量?

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

如果您只根据服务器日志跟踪活动,则每次都需要执行网络请求。这是一个有点低效和老派的IMO。但是,如果您通过跟踪活动的方式构建了一种处理它的方法。您需要构建一种人工AJAX方式来更新日志。当然,您可以使用它来保持缓存新鲜,在重新验证策略时过时。

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

如果您在消费者离线时允许活动,那么您需要将活动排队并在重新上线后重播活动。这是后台同步API在广泛支持后将非常有用的地方。

希望这会有所帮助。如果您有更多问题和说明,请与我们联系。