Quando eseguo codice che riguarda imageData che viene passato a un web worker e quindi indietro, Firefox funziona perfettamente ma Chrome restituisce "Errore non rilevato: DATA_CLONE_ERR: DOM Exception 25"Web worker che si occupa di imageData che funziona con Firefox ma non Chrome
La ricerca su google suggerisce che le versioni precedenti di Chrome funzionassero?
Ho controllato un po 'di più e sembrava come se avessi bisogno di eseguire JSON.stringify e JSON.parse sul imagedata prima di inviarlo, ma poi smette di funzionare ovunque. Il codice che funziona in FF 9 è:
image.js:
var myImageData = context.getImageData(0, 0, canvas.width, canvas.height).data;
var worker = new Worker("http://direct.link/helpers/worker.js");
worker.postMessage(myImageData);
worker.onmessage = function(event) {
var value = event.data;
switch (value.cmd){
case 'last':
//doing stuff
break;
default:
//doing stuff
});
}
worker.js:
addEventListener('message', function(event) {
var myImageData = event.data;
// doing stuff.
sendItBack(colors);
});
};
function sendItBack(colors){
each(colors, function(index, value){
self.postMessage(value);
});
self.postMessage({'cmd': 'last'});
}
Quale metodo dovrei usare per inviare questo imagedata avanti e indietro la app e il web worker?
Grazie!
EDIT:
Se copio ad una serie regolare, allora Chrome inizia a lavorare ...
var newImageData = [];
for (var i=0,len=myImageData.length;i<len;++i) newImageData[i] = myImageData[i];
Quindi Chrome non può passare un CanvasPixelArray ad un lavoratore ma si può passare una serie regolare. Ma Firefox può.
http: // stackoverflow.it/questions/7506635/uncaught-error-data-clone-err-dom-exception-25-thrown-by-web-worker –
oops. Grazie. Fammi provare :) – garg
Non sono ancora chiaro su questo. I dati che sto passando (context.getImageData (0, 0, canvas.width, canvas.height) .data) sono un array di grandi dimensioni e non dovrebbero avere errori di riferimento circolari. Se viene convertito in JSON internamente da postMessage, allora dovrebbe solo passare attraverso gli errori. E per quanto ne so, non sto inoltrando un elemento DOM. – garg