chrome浏览器无法正确使用web worker
Web Worker示例代码:
主线程:
var input = document.getElementById('inp')
document.getElementById('btn').onclick = function(){
var number = input.value;
// 创建一个Worker对象
var worker = new Worker('worker.js');
// 向分线程发送消息
worker.postMessage(number);
console.log('主线程向分线程发送数据:'+number);
// 绑定监听,接收分线程的响应
worker.onmessage = function(event){
console.log('主线程接收分线程数据:'+event.data)
// console.log(event.data)
}
}
分线程:
function fibonacci(n){
return n < 2 ? n : fibonacci(n-1) + fibonacci(n-2)
}
var onmessage = function(event){
var number = event.data
console.log('分线程接收到主线程发送的数据:'+number)
var result = fibonacci(number)
postMessage(result)
console.log('分线程向主线程返回数据:'+result)
}
问题:
使用vscode运行代码时,采用的本地调用的方式,此时的地址栏信息为:
file:///F:/JavaScriptTest/JavaScript_Senior/2_FunctionSenior/demo2.html
运行程序报错:
demo2.js:9 Uncaught DOMException: Failed to construct 'Worker': Script at 'file:///F:/JavaScriptTest/JavaScript_Senior/2_FunctionSenior/worker.js' cannot be accessed from origin 'null'.
at HTMLButtonElement.document.getElementById.onclick (file:///F:/JavaScriptTest/JavaScript_Senior/2_FunctionSenior/demo2.js:9:15)
原因是chrome浏览器不支持这种本地方式使用web worker! 需要放在web容器中运行(如tomcat)。
而使用Web Storm运行代码时,浏览器使用了本地的端口,地址栏信息为:
http://localhost:63342/JavaScriptTest/JavaScript_Senior/2_FunctionSenior/demo2.html?_ijt=jdh235h8hp4h2b9tbqmkftb7ml
此时程序就可以正常运行。