Capítulo 9

Web Workers - Exemplo 3

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>