2012-03-11 39 views
8

Tương đương với cách nhấn Ctrl + C trong bảng điều khiển, cho Chrome và Firefox là gì? Trong khi thực hiện các thuật toán khác nhau tôi thường viết một số lỗi (while) vòng lặp, trong Javascript, không thoát, làm cho trình duyệt bị đóng băng. Việc tải lại không hoạt động, việc nhấp vào X nhỏ để đóng tab không làm bất cứ điều gì, và trong một thời gian (nghĩa là) tôi đang hết bộ nhớ, hệ thống đang hoán đổi, và tôi sẽ nghỉ giải lao.Làm thế nào để bạn ngắt JS trong trình duyệt?

+0

ctrl + alt + del – user544262772

+3

Tôi phải thừa nhận rằng điều này có nghĩa là nhiều hơn là "động lực" cho các nhà phát triển trình duyệt, để khắc phục tình huống. – skrat

+0

Những người thực thi JS hiện tại thật ngu ngốc rằng họ không thể làm điều gì đó đơn giản như vậy. – Pacerier

Trả lời

5

Không có những điều như một Ctrl + C cho JavaScript. Các trình duyệt thực hiện JavaScript thường bảo vệ chính chúng. Nếu bất kỳ mã JavaScript nào bị treo, chúng sẽ ném một hộp thoại hỏi xem người dùng có muốn dừng JavaScript hay không.

Thời lượng hết giờ thường có thể được tìm thấy trong cài đặt của trình duyệt. Bạn có thể tìm cách làm điều đó cho FireFox tại đây: http://www.trixya.net/index.php/internet/how-to-set-javascript-timeout-in-firefox

+1

Họ làm hộp thoại đó hơi quá muộn, khi hệ thống của tôi đã được trao đổi. – skrat

5

Trong Chrome, bạn có thể nhấn Shift+ESC (hoặc nhấp chuột phải vào thanh tiêu đề và mở trình quản lý tác vụ Chrome) và hủy quá trình được liên kết với tab treo. Điều này sẽ làm việc trong trường hợp đóng tab sẽ không.

Thông báo trước là, đôi khi Chrome sẽ hợp lý hóa nhiều tab thành một quá trình và điều này sẽ giết tất cả các tab được liên kết với quy trình.


cách tiếp cận khác bạn có thể làm để tránh while vòng treo trình duyệt là để viết mã như thế này (bạn có thể lấy nó ra sau khi thử nghiệm):

var maxIterations = 100000; 
while (foo) { 
    if (!maxIterations--) throw new Error('Max iterations hit, aborting.'); 
    // do stuff 
} 

Kích chuột phải vào trong Trình quản lý tác vụ của Chrome và chọn mục ở cuối trình đơn ngữ cảnh để hiển thị một quả trứng Phục sinh kỳ lạ.

+0

'while (foo && --maxIterations) {...}' – vol7ron

+0

@ vol7ron Tôi đã lưu các công cụ tối đa trên các dòng riêng biệt từ phần còn lại của mã để có thể dễ dàng bị loại bỏ sau này nếu cần –

+0

Tôi hiểu bạn đang làm gì đang làm. Đối với tôi, sẽ dễ dàng hơn để xóa và giữ mọi thứ gần nhau. Có một khối riêng biệt nếu nó chia nhỏ nó một chút - bạn phải thực sự đọc vào khối trong khi thay vì chỉ nhìn vào các điều kiện và điều kiện trước – vol7ron

1

Từ những gì ít cái nhìn sâu sắc Tôi có vào cách bạn làm việc, làm thế nào tôi sẽ tiến hành là:

  • Chỉ thực thi kịch bản về một sự kiện như nút bấm. Đây kịch bản sẽ ngăn chặn chạy onload
  • Chrome cho phép bạn thiết lập điểm break trong mã js của bạn trong tab kịch bản của công cụ phát triển
0

Không có "gián đoạn" thực sự cho việc chạy mã Javascript trong trình duyệt. ECMAscript được thực hiện trong cái gọi là "giao diện người dùng", có nghĩa là tất cả các công cụ hiển thị xảy ra trong cùng một hàng đợi mã ECMAscript được thực thi.

Điều đó có nghĩa là, vòng lặp vô hạn trong ECMAscript tự động treo toàn bộ tương tác trình duyệt.

Cách duy nhất để tránh điều đó là viết mã rõ ràng, sạch sẽ. Nếu nó xảy ra anyway, hầu hết các trình duyệt nhận ra rằng các chủ đề giao diện người dùng bận rộn quá lâu và yêu cầu người dùng nếu anh ta muốn hủy bỏ quá trình chạy javascript. Nếu bạn không muốn chờ đợi điều đó, lựa chọn duy nhất của bạn là giết toàn bộ quá trình duyệt/tab. Tuy nhiên, nếu bạn biết rằng một số phần của tập lệnh có thể gây ra vòng lặp vô hạn, bạn có thể đặt breakpoints theo cách thủ công trong một số loại developer tools hoặc bạn có thể chèn trực tiếp từ khóa debugger; vào tập lệnh của mình.Điều đó làm cho trình thông dịch javascript dừng lại ở dòng hiện tại và bạn có cơ hội phân tích mã tiếp theo (trong khi điều kiện ví dụ) và hủy thực thi nếu nó có vẻ xấu.

+2

Tôi không thể làm bất cứ điều gì, hãy thử một vòng lặp 'while (1) {}', và cố gắng để có được một lối ra sạch (đóng tab, đóng cửa sổ, vv) – skrat

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