在Safari Web Inspector中调试Web Workers

时间:2015-06-05 12:23:53

标签: javascript debugging safari web-worker

Chrome的Dev Tools非常适合调试网络工作者,因为我可以“浏览”JavaScript环境并设置断点。甚至控制台也按预期工作。

在Safari上,这是一个完全不同的故事。来自Web worker的console.log甚至不在控制台中打印。我看到工作脚本已加载,我在其上设置了一个断点,但它没有破坏。我甚至没有看到加载importScripts的脚本。

如何使用Safari的Web Inspector解决问题?

我觉得这不重要,但我使用的是Safari 8。

2 个答案:

答案 0 :(得分:1)

在您的来源

中插入debugger;代码

用法:将其插入任何想要添加断点的位置,当开发者控制台打开时,执行将在该行暂停

var a = 50;
a = a + 5;
debugger; //--> execution is paused here
a = a - 5;

有关详细信息,请参阅Debugger Documentation on mozilla.org

答案 1 :(得分:-1)

代替console.log,您可以使用postMessage。 postMessage应该允许您将调试消息发送到safari控制台。

Here是如何做到这一点的一个很好的例子,我粘贴了下面的主要想法:

//
// In the Main thread
//
var worker = new Worker('/path/of/webworker/code.js')
worker.onmessage = function (e) {
  var result = JSON.parse(e.data);
  if(result.type == 'debug') {
    console.log(result.msg);
  } else if(result.type == 'response') {
    // ... use result.answer ...
  }
}


//
// In the WebWorker
//
function debug(msg) {                                                           
  postMessage(JSON.stringify({type:'debug',msg:msg}));                          
}

onmessage = function (e) {
  var inputData = e.data;
  // work on input data
  debug('Working OK');
  // work some more
  // ...
  postMessage(JSON.stringify({type:'response', answer:42}));
};

如果您不想使用postMessage,David Flanagan为它创建了一个包装器here,它应该允许您至少使用console.log进行调试