如何使用AMP文件中的服务工作者来缓存CDN中的文件?

时间:2018-02-25 18:10:07

标签: javascript service-worker amp-html progressive-web-apps

我想服务工作者缓存来自我的cdn的文件? 如果文件在我的根域下,一切都没问题,否则我总会得到错误,例如"跨越原始域..."。

我的所有静态资源都在cdn上,我应该如何处理缓存这些文件?

我在AMP中的代码

<amp-install-serviceworker src="https://www.example.com/swAmp.js" layout="nodisplay"></amp-install-serviceworker>

我的服务人员swAmp.js

var CACHE_NAME = 'example-v0';
var urls = [
  'https://static.example.com/img/menu/1.png',
  'https://static.example.com/img/menu/2.png',
  'https://static.example.com/img/menu/3.png'
];

self.addEventListener('install', function(event) {
    event.waitUntil(
        caches.open(CACHE_NAME)
            .then(function(cache) {
                console.log('Opened cache');
                return cache.addAll(urls);
            })
    );
});

所有样本均基于当地资源:(

以后如何为他们服务? 完整的样本将非常有用,thx。

1 个答案:

答案 0 :(得分:2)

我找到了一个在本文中有效的答案 https://filipbech.github.io/2017/02/service-worker-and-caching-from-other-origins

self.addEventListener('install', function(event) {
    event.waitUntil(
        caches.open(CACHE)
            .then(function(cache) {
                console.log('Opened cache');
                urls.forEach(function(value) {
                    const request = new Request(value, {mode: 'no-cors'});
                    fetch(request).then(response => cache.put(request, response));
                });
                return cache;
            })
    );
});