工作线程中的window.alert

时间:2010-04-12 14:02:20

标签: javascript web-worker

如果我在webworker客户端上放置window.alert,则后台工作程序将停止工作。 为什么会这样?

即。 来电者:

var worker = new Worker("worker.js");
// Watch for messages from the worker
worker.onmessage = function(e){
  // The message from the client:
  e.data
};
worker.postMessage("start");

客户端(worker.js)

onmessage = function(e){
  if ( e.data === "start" ) {
    // Do some computation
    done()
  }
};

function done(){
  alert('don');  // ===> This kills the worker.
  // Send back the results to the parent page
  postMessage("done");
}

3 个答案:

答案 0 :(得分:2)

网络工作者是否可以访问window.alert ...我知道网络工作者无法访问dom ..

在工人中,为什么不做一个

if (window && window.alert) {
   // do your normal thing
}
else {
   postMessage("no support for this");
}

答案 1 :(得分:0)

您是否注意到警报会冻结javascript引擎,直到用户点击“确定”。

如果您不希望它冻结,请不要使用警报。

使用萤火虫进行调配:

console.log("bla bla bla");

对于非锁定弹出窗口:

制作一个隐藏的div,上面有一个ok按钮。当要显示弹出窗口时。把div看得见。当用户点击“确定”时隐藏它。

我建议你不要使用弹出窗口。它还打破了屏幕后面用户的“工作流程”(意味着用户的注意力):)

答案 2 :(得分:0)

Web Workers允许您在后台运行JavaScript代码。 Web工作者无法调用alert()或confirm()函数。