WebWorkersでエラー表示
最近のブラウザだとワーカ内でエラーが起こった場合、コンソールに表示してくれるけど、
ちょっと古いブラウザだと表示も何もしてくれないとか…… というわけでエラーの表示を。
上の記事にちょっと手を加えたものを以下に。
環境:MacOS 10.7.2 64bit / Google Chrome 17.0.963.12 dev
--- index.html 2012-01-04 23:13:02.000000000 +0900 +++ diff.html 2012-01-04 23:07:26.000000000 +0900 @@ -16,17 +16,6 @@ JSON.parse(event.data).join('<br>') ); }, false); - - // w.onerror = function(event) { ... }; - w.addEventListener('error', function(event){ - var messages = [ - 'filename: ' + event.filename, - 'lineno: ' + event.lineno, - 'message: ' + event.message - ]; - document.write(messages.join('<br>')); - }, true); - w.postMessage(MAX_SIN); }()); </script>
--- worker.js 2012-01-04 23:11:435669325112 +0900 +++ diff.js 2012-01-04 23:12:20.909898919 +0900 @@ -2,6 +2,7 @@ // event.data === MAX_SIN var i, result = []; + document; for (i = event.data; i >= 0; i -= 1) { result[i] = Math.sin(i); }
と編集して、http://localhost:8080/にアクセスすると
filename: http://localhost:8080/worker.js lineno: 4 message: Uncaught ReferenceError: document is not defined
と表示される。ブラウザはほぼ最新なので、JavaScriptコンソールにも表示されてた。
var messages = [ 'filename: ' + event.filename, 'lineno: ' + event.lineno, 'message: ' + event.message ]; document.write(messages.join('<br>'));
でなくても
document.write([ 'filename: ' + event.filename, 'lineno: ' + event.lineno, 'message: ' + event.message ].join('<br>'));
でよかったかも。