在 Safari Web Inspector 中调试 Web Workers

问题描述 投票:0回答:2

Chrome 的开发工具非常适合调试 Web Worker,因为我可以“浏览”该 JavaScript 环境并设置断点。甚至控制台也按预期工作。

在 Safari 上,情况完全不同。来自网络工作人员的

console.log
甚至不会在控制台中打印。我看到工作脚本已加载,并在其上放置了一个断点,但它没有中断。我什至没有看到加载了
importScripts
的脚本。

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

我认为这并不重要,但我使用的是 Safari 8。

javascript debugging safari web-worker
2个回答
-1
投票

在源代码中插入

debugger;
代码

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

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

有关更多信息,请参阅 mozilla.org 上的 调试器文档


-3
投票

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

这里是一个关于如何做到这一点的很好的例子,我将主要思想粘贴在下面:

//
// 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 进行调试

© www.soinside.com 2019 - 2024. All rights reserved.