Bạn có thể tạm dừng thực thi JavaScript mà không cần khóa trình duyệt không? Cách bạn sẽ tạm dừng thực hiện là thực hiện một vòng lặp vô hạn while()
, nhưng trong trường hợp của FireFox, nó sẽ khóa trình duyệt cho đến khi vòng lặp kết thúc.Tạm dừng thực thi JavaScript mà không cần khóa trình duyệt
Bạn sẽ làm gì với điều này?
Tôi đang cố gắng ghi đè window.confirm()
để triển khai hộp thoại của riêng mình bằng HTML. Tôi đang làm điều này vì vậy tôi không phải thay đổi mã hiện tại (đó là một mã code-base khá lớn).
Tôi cần có khả năng tạm dừng thực thi để cho phép người dùng nhập; để lần lượt trả về một boolean như chức năng xác nhận tiêu chuẩn thực hiện:
if (confirm("..."))
{
// user pressed "OK"
}
else
{
// user pressed "Cancel"
}
Cập nhật
Theo hiểu biết của tôi; điều này không thể được thực hiện bằng cách sử dụng setTimeout()
hoặc setInterval()
vì các hàm này thực thi mã được cung cấp cho chúng một cách không đồng bộ.
'setTimeout' và' setInterval' * không * thực thi mã không đồng bộ, họ đếm xuống và sau đó thêm chức năng gọi lại vào một hàng đợi được gọi khi luồng không hoạt động. Các chức năng tự chạy sau đó đồng bộ. –
Xem thêm: http://stackoverflow.com/questions/2056747/javascript-puzzle-to-solve-window-confirm-divconfirmstrmessage –
@Andy E - 'window.setTimeout' (và' window.setInterval') tạo các cuộc gọi lại không đồng bộ . Luồng chương trình bình thường tiếp tục ngay lập tức sau khi gọi nó và cuộc gọi lại được thực hiện vào một ngày sau đó, tùy thuộc vào độ dài bộ đếm thời gian. Thực tế là JavaScript là đơn luồng và gọi lại, khi nó đã bắt đầu thực hiện, sau đó chặn các mã khác khỏi thực thi không ngăn không cho nó không đồng bộ. –