2015-06-05 22 views
11

Gli strumenti di sviluppo di Chrome sono ottimi per eseguire il debug di web worker in quanto posso "navigare" in quell'ambiente JavaScript e impostare i punti di interruzione. Anche la console funziona come previsto.Debug di Web worker in Safari Web Inspector

Su Safari, è una storia completamente diversa. console.log dal web worker non stampa nemmeno nella console. Vedo caricato lo script di lavoro e vi metto un punto di interruzione, ma non si spezza. Non vedo nemmeno gli script caricati con importScripts.

Come posso utilizzare Safari's Web Inspector per la risoluzione dei problemi?

Non che io credo sia importante, ma sto usando Safari 8.

+1

C'è un motivo è necessario utilizzare Safari? Stai investigando su un problema specifico di Safari? – Halcyon

+1

Il prodotto della mia azienda supporta Safari (e tutti i principali browser) e vogliamo offrire ai clienti e ai tecnici dell'assistenza la possibilità di risolvere i problemi, indipendentemente dal browser. –

+2

Chrome, FireFox, Opera, IE, Edge; Tutti mostrano i messaggi dagli operatori Web nella console. Safari? "Ah, lo sappiamo meglio, non ne hai bisogno .." – muttonUp

risposta

-1

Al posto di console.log, è possibile utilizzare postMessage. postMessage dovrebbe consentire di inviare messaggi di debug alla console di safari.

Here è un grande esempio di come farlo, ho incollato l'idea principale di seguito:

// 
// 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})); 
}; 

Se non si vuole giocare con postMessage però, David Flanagan ha fatto un wrapper per esso here che dovrebbe consentire di fare almeno il debug con console.log

+1

So di 'postMessage', ma voglio veramente impostare i breakpoint e avere una completa esperienza di debug. –

1

Inserire il codice di debugger; nell'origine

Usage: Inserire ovunque si desidera aggiungere un punto di interruzione e quando lo sviluppatore co nsole è aperto automaticamente l'esecuzione farà una pausa in quella riga

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

Per maggiori informazioni vedere il Debugger Documentation on mozilla.org

+1

Fornisci un nome descrittivo o un titolo per i tuoi link in futuro. –

+0

@Daniel A. Bianco, Ciao, questo lavoro fa per te? Se sì, puoi postare questo post ?? –

+0

Non fa nulla in Safari (<= 9.1) – user3761308