Подтвердить что ты не робот

Отладка веб-работников в Safari Web Inspector

Инструменты Chrome Dev отлично подходят для отладки веб-работников, так как я могу "просматривать" эту среду JavaScript и устанавливать точки останова. Даже консоль работает как ожидалось.

В Safari это совершенно другая история. console.log от веб-рабочего даже не печатает на консоли. Я вижу, что рабочий script загружен, и я наложил на него точку останова, но он не сломается. Я даже не вижу сценарии, загруженные с помощью importScripts.

Как я могу использовать Safari Web Inspector для устранения неполадок?

Не думаю, что это важно, но я использую Safari 8.

4b9b3361

Ответ 1

Вставьте код debugger; в исходный код

Использование: вставьте его куда угодно, чтобы добавить точку останова, и когда консоль разработчика открыта автоматически, выполнение приостанавливается в этой строке

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

Для получения дополнительной информации см. Документация отладчика на mozilla.org

Ответ 2

Вместо console.log вы можете использовать postMessage. postMessage должен позволить вам отправлять сообщения отладки в сафари-консоль.

Здесь - отличный пример того, как это сделать, я вставил основную идею ниже:

//
// 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, Дэвид Фланаган сделал для него обертку , которая должна позволить вам хотя бы <отладкa > с помощью console.log