Sayfanın isteklerini yakalayan bir hizmet çalışanım var (fetch
olay) ve URL belirli bir kalıpla eşleştiğinde başka bir URL alır ve bu yeni içeriğin yanıtını değiştirir. Metin verileri (JS, XML ...) veya ikili veriler (örn. Görüntüler) için mükemmel şekilde çalışır, ancak video söz konusu olduğunda, bir aksaklık söz konusudur.Bir videoyu bir ServiceWorker'dan nasıl aktarabilirim?
OSX'te Chrome 41 kullanıyorum.
Bu benim işçinin basitleştirilmiş kodudur:
self.addEventListener('fetch', function(event) {
var url = event.request.url;
console.log('SW: fetch', url);
if (/\.mp4$/.test(url)) {
url = 'https://vjs.zencdn.net/v/oceans.mp4';
var options = {
credentials: 'include',
mode: 'no-cors'
};
event.respondWith(fetch(url, options));
}
});
Ve bu benim HTML sayfasında basitleştirilmiş kod şudur:
navigator.serviceWorker.register('sw.js').then(function(reg) {
console.info('ServiceWorker registration successful for', reg.scope);
var video = document.createElement('video');
video.src = '/video.mp4';
video.controls = true;
video.autoplay = true;
video.onerror = function(err) {
console.error('Video load fail', err);
}
video.onload = function(data) {
console.info('Video load success');
}
document.body.appendChild(video);
}).catch(function(err) {
console.error('ServiceWorker registration failed:', err);
});
Eğer sayfayı yüklemek ilk kez işçi yükler, Böylece video isteği yakalanmıyor, bu yüzden başarısız oluyor. Ancak sayfayı yeniden yüklediğinizde (önbelleği temizlemeden), başarılı bir şekilde yakalanır ve çalışan videoyu (denetçisinde HTTP 200) başarıyla yükler, ancak bir nedenle ana sayfa net::ERR_FAILED
'u atar.
Ve elle bir "opak" Yanıt türü sonuçlanan farklı bir kökten gelir, çünkü akışa/okuyamaz: http://www.w3.org/TR/service-workers/#cross-origin-resources
GÜNCELLEME: Chrome 42 güncelleme, hata şimdi HTTP 400 Service Worker Fallback Required (from ServiceWorker)
olduğunu. Garip olan şey, the source code'un (satır 510) sadece CORS başlıklarının eksik olması durumunda kaldırılacağını, ancak burada modun no-cors
olduğunu gösterir.
Çok teşekkürler Jeff, CORS başlıkları gerçekten sorun! – antoine129
Hata ayıklamayı iyileştirmek için Chromium izleyicide bir sorun açtım: https://code.google.com/p/chromium/issues/detail?id=477685 – antoine129