2017-08-28 105 views
1

我想用PreloadJS使用服務人員。我緩存了所需的圖像,然後使用caches.match()函數加載它們。PreloadJS和服務工作人員

當我嘗試用jQuery它工作正常加載圖像,但裝載有preloadJS它提供了以下錯誤

的FetchEvent爲「someurl」導致網絡錯誤響應:「不透明」響應用於請求的類型不是非Cors

雖然如果我加載任何其他圖像沒有緩存,PreloadJS正確加載該圖像。只有當我使用caches.match時,問題纔會發生。

這可能是什麼原因?

使用jquery

加載圖像使用preloadjs

var preload = new createjs.LoadQueue({ crossOrigin: "Anonymous" }); 

function loadImageUsingPreload() { 

    preload.on('complete', completed); 

    preload.loadFile({ id: 'someid', src: 'someurl', crossOrigin: true }) 

}; 

function completed() { 
    var image = preload.getResult("shd"); 
    document.body.append(image); 
}; 

加載圖像

function loadImageUsingJquery() { 
    jQuery("#image").attr('src', 'someurl'); 
}; 

服務人員取事件

self.addEventListener('fetch', function(event) { 
    event.respondWith(
    caches.match(event.request).then(function(response) { 

     if (!response) { 
     console.log('fetching...' + event.request.url); 
     return fetch(event.request); 
     }; 
     console.log("response", response); 
     return response; 
    })); 
}); 

響應對象當我加載使用PreloadJS或jQuery的:

響應{類型: 「不透明」,網址: 「」,重定向:假,狀態:0,OK:假的,...}

+0

你檢查了這個問題嗎? https://stackoverflow.com/questions/35626269/how-to-use-service-worker-to-cache-cross-domain-resources-if-the-response-is-404 –

回答

1

發現了錯誤,在cache.put

其實如果來源不相同,則將請求對象的模式修改爲'no-cors'

現在,在提取事件期間,事件的請求對象具有屬性'cors',因爲它是一個跨源請求。

這個mode的值的差異導致了獲取錯誤。

服務人員安裝事件:

var request = new Request(value); 
var url = new URL(request.url); 

if (url.origin != location.origin) { 
    request = new Request(value, { mode: 'no-cors' }); 
} 

return fetch(request).then(function(response) { 
    var cachedCopy = response.clone(); 
    return cache.put(request, cachedCopy); 
}); 

我把它改爲:

var request = new Request(value); 
var url = new URL(request.url); 

return fetch(request).then(function(response) { 
    var cachedCopy = response.clone(); 
    return cache.put(request, cachedCopy); 
}); 

我必須使用保存CDN的第一種方法,因爲第二種方法是不適合他們,反之亦然工作爲我的圖像託管在雲端。

我會發現原因,當我找到爲什麼發生這種情況。

相關問題