2015-01-26 14 views
7

Opracowuję rozszerzenie przeglądarki Firefox oparte na XUL. Próbuję utworzyć inline Web Worker przy użyciu BLOB. Kod używany do pracy w przeglądarce Firefox 33, ale po aktualizacji do Firefoksa 35 Wystąpił błąd. Oto przykładowy kod:Nie można utworzyć wbudowanego obiektu Web Worker w przeglądarce Firefox 35 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); 
} 

I otrzymuję następujący błąd:

Failed to load script (nsresult = 0x805303f4) 

Zdaję sobie sprawę, że pojawi się ten błąd, gdy Web Worker próbuje załadować skryptu z innej domeny, ale nie mogę dowiedzieć się, dlaczego tak się dzieje w moim przypadku. Adres URL otrzymany od funkcji createObjectURL() wydaje się być nieprawidłowy. Zawiera prefiks "null /".

Czy ktoś ma wyjaśnienie, co się dzieje? Jaka jest możliwa poprawka tutaj?

+1

może się zdarzyć, że 'Blob' nie jest już w zakresie dodatku (przystań w stanie wykorzystać go w JSMs na chwilę teraz), nie jestem pewien, spróbuj importowania Blob tak: https://developer.mozilla.org/en-US/docs/Web/API/Blob#Chrome_Code_-_Scope_Availability również widzę, że dotykasz 'okna', aby uzyskać' window.URL' możesz zaimportować adres URL w ten sam sposób: https://developer.mozilla.org/en-US/docs/Web/API/URL#Chrome_Code_-_Scope_Availability – Noitidart

+0

Gdzie dokładnie uruchamiasz ten kod? W zakresie XUL (chrome), wstrzyknięty do strony, poprzez "SandBox"? Podaj * pełny *, powtarzalny przykład. – nmaier

+0

Kod działa w zakresie chromowania, NIE jest wstrzykiwany do żadnej strony internetowej. Dodanie 'Components.utils.importGlobalProperties (['Blob', 'URL']);' nie pomoże. – saloman

Odpowiedz

1

Ten przykład działa dla mnie, testowany z przeglądarki Firefox 37 na 39.0a2.

// 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'); 
Powiązane problemy