Comunicação da página com o Worker e vice-versa
Mostra o uso do evento error. O script do worker contém erro
JavaScript
<script>
function init() {
if (!Modernizr.webworkers) {alert('Lamento, seu navegador não suporta Web Workers')}
var campoMensagem,btnLimpar,btnIniciarWorker,campoResultado;
campoMensagem = document.getElementsByTagName('input')[0];
btnLimpar = document.getElementsByTagName('button')[0];
btnIniciarWorker = document.getElementsByTagName('button')[1];
campoResultado = document.getElementById('msg');
function comunicarWorker() {
if(campoMensagem.value == '') {
alert('Digite sua mensagem para o Worker');
return;
}
campoResultado.style.display = 'block';
var textoMensagem = campoMensagem.value;
var worker = new Worker('exemplo3.js');
worker.onerror = function (e) {
linhaErro = e.lineno;
msgErro = e.message;
arquivoErro = e.filename;
erro = 'Ops! Ocorreu o seguinte erro: ';
erro += 'Linha: '+ linhaErro + ' ';
erro += 'Erro: '+ msgErro + ' ';
erro += 'Arquivo: '+ arquivoErro;
campoResultado.innerHTML = erro;
};
worker.postMessage(textoMensagem);
worker.onmessage = function (e) {
campoResultado.innerHTML = e.data;
};
};
if(window.addEventListener) {
btnIniciarWorker.addEventListener('click', comunicarWorker, false);
btnLimpar.addEventListener('click', function() {
campoMensagem.value = '';
campoResultado.style.display = 'none';
}, false);
} else {
btnLimpar.attachEvent('onclick', function() {
campoMensagem.value = '';
campoResultado.style.display = 'none';
});
btnIniciarWorker.attachEvent('onclick', comunicarWorker);
};
}
window.onload = init;
</script>
// xxxxxxxxxxxxx Tarefa do Worker - arquivo exemplo3.js xxxxxxxxxxxxx
onmessage = function(e) {
var mensagemRecebida = e.data;
var mensagemRetornada = 'O Worker acusa o recebimento da seguinte mensagem:<br><span class="dest">'+ mensagemRecebida +'</span>';
postMessage(MensagemRetornada); // Aqui há um erro - mensagemRetornada e não MensagemRetornada
}
HTML
<section>
<h3>Comunicação da página com o Worker e vice-versa</h3>
<p><label>Entre uma mensagem:<br><input type=text></label>
<button type=button>Limpar</button></p>
<p><button type=button>Iniciar Worker</button>
<p id="msg"></p>
</section>