2015-06-05 20 views
11

Công cụ dành cho Chrome của Chrome là công cụ tuyệt vời để gỡ lỗi công nhân web vì tôi có thể "duyệt" vào môi trường JavaScript đó và đặt điểm ngắt. Ngay cả giao diện điều khiển cũng hoạt động như mong đợi.Gỡ lỗi Công nhân Web trong Trình kiểm tra Web Safari

Trên Safari, đó là một câu chuyện hoàn toàn khác. console.log từ nhân viên web thậm chí không in trong bảng điều khiển. Tôi thấy kịch bản công nhân được tải và tôi đặt một điểm break vào nó, nhưng nó không phá vỡ. Tôi thậm chí không thấy các tập lệnh được tải với importScripts.

Tôi làm cách nào để sử dụng Trình kiểm tra trang web của Safari để khắc phục sự cố?

Không phải là tôi nghĩ điều đó quan trọng, nhưng tôi đang sử dụng Safari 8.

+1

Có một lý do bạn cần sử dụng Safari? Bạn đang điều tra một vấn đề cụ thể của Safari? – Halcyon

+1

Sản phẩm của công ty tôi hỗ trợ Safari (và tất cả các trình duyệt chính) và chúng tôi muốn cung cấp cho khách hàng và các kỹ sư hỗ trợ khả năng khắc phục sự cố, bất kể trình duyệt web nào. –

+2

Chrome, FireFox, Opera, IE, Edge; Tất cả tin nhắn hiển thị từ nhân viên web trong bảng điều khiển. Safari? "Ha! Chúng tôi biết rõ hơn, bạn không cần điều đó .." – muttonUp

Trả lời

-1

Thay vì console.log, bạn có thể sử dụng postMessage. postMessage sẽ cho phép bạn gửi thông báo gỡ lỗi đến bảng điều khiển safari.

Here là một ví dụ tuyệt vời về cách để làm điều đó, tôi dán tưởng chính dưới đây:

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

Nếu bạn không muốn chơi xung quanh với postMessage Mặc dù vậy, David Flanagan làm một wrapper cho nó here mà nên cho phép bạn ít nhất là làm gỡ lỗi với console.log

+1

Tôi biết về 'postMessage' tuy nhiên tôi thực sự muốn thiết lập breakpoints và có một kinh nghiệm gỡ lỗi hoàn toàn. –

1

Chèn mã debugger; trong mã nguồn của bạn

Cách sử dụng: Chèn nó bất cứ nơi nào bạn muốn thêm một breakpoint và khi đồng nhà phát triển nsole mở cửa tự động thực hiện sẽ tạm dừng tại dòng

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

Để biết thêm thông thấy Debugger Documentation on mozilla.org

+1

Tạo tên hoặc tiêu đề mô tả cho các liên kết của bạn trong tương lai. –

+0

@Daniel A. Trắng, Chào bạn, điều này có phù hợp với bạn không ?? Nếu có, bạn có thể upvote bài đăng này ?? –

+0

Không làm bất cứ điều gì trong Safari (<= 9.1) – user3761308

Các vấn đề liên quan