2015-01-26 10 views
7

XUL tabanlı bir Firefox eklentisi geliştiriyorum. BLOB kullanarak bir satır içi Web Çalışanı oluşturmaya çalışıyorum. Firefox 33'te çalışmak için kullanılan kod ancak Firefox 35 güncellemesinden sonra bir hata alıyorum. İşte bir kod örneği geçerli:Firefox 35 içinde satır içi Web Çalışanı oluşturulamıyor addon

try { 
    var blob = new Blob(["function f(){}"], {type: "application/javascript"}); 
    var url = window.URL.createObjectURL(blob); //blob:null/371e34bd-1fbf-4f66-89cc-24d0c1c7bad5 
    return new Worker(url); 
} catch(e) { 
    console.error(e); 
} 

Ve ben bir aşağıdaki hatayı alıyorum:

Failed to load script (nsresult = 0x805303f4) 

Ben Ağ Yapıcı yapamam farklı bir etki alanından bir komut dosyası yüklenmeye çalışıyor, ancak bu hata görünür farkındayım Benim durumumda bunun neden olduğunu anlamaya. CreateObjectURL() işlevinden aldığım url geçersiz görünüyor. "Boş"/öneki içerir.

Neler olup bittiğine dair bir açıklaması var mı? Burada olası düzeltme nedir?

+1

Bu Blob' (şimdi bir süre için JSMS kullanmak mümkün sığınak), im emin değilim, böyle Blob'u aktarmayı deneyin eklenti kapsamında artık 'olabilir: https://developer.mozilla.org/en-US/docs/Web/API/Blob#Chrome_Code_-_Scope_Availability ayrıca "window.URL" penceresini almak için 'window' penceresine tıkladığınızı görüyorum. URL'yi aynı şekilde içe aktarabilirsiniz: https://developer.mozilla.org/en-US/docs/Web/API/URL#Chrome_Code_-_Scope_Availability – Noitidart

+0

Bu kodu tam olarak nerede çalıştırıyorsunuz? XUL (krom) kapsamında, web sayfasına bir "SandBox" üzerinden enjekte edildi mi? Lütfen * tam *, tekrarlanabilir bir örnek verin. – nmaier

+0

Kod, krom kapsamında çalışıyor, hiçbir web sayfasına enjekte edilmiyor. Components.utils.importGlobalProperties (['Blob', 'URL']) eklemek '' yardımcı olmaz. – saloman

cevap

1

Bu örnek benim için çalışır, Firefox 37'den 39.0a2'ye test edilmiştir.

// URL.createObjectURL 
window.URL = window.URL || window.webkitURL; 

// "Server response", used in all examples 
var response = "self.onmessage=function(e){postMessage('Worker: '+e.data);}"; 

var blob; 
try { 
    blob = new Blob([response], {type: 'application/javascript'}); 
} catch (e) { // Backwards-compatibility 
    window.BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder; 
    blob = new BlobBuilder(); 
    blob.append(response); 
    blob = blob.getBlob(); 
} 
var worker = new Worker(URL.createObjectURL(blob)); 

// Test, used in all examples: 
worker.onmessage = function(e) { 
    alert('Response: ' + e.data); 
}; 
worker.postMessage('Test');