2012-11-29 28 views
16

Có thể tạo thông báo phương thức tùy chỉnh để 'chặn' việc thực thi tập lệnh cho đến khi người dùng nhập không?Mô phỏng tính chất chặn 'cảnh báo' của Javascript

Ví dụ: làm thế nào bạn có thể đạt được điều này mà không cần sử dụng chức năng cảnh báo/nhắc cửa sổ gốc?

setInterval(function(){ 
    alert('Click OK to Continue'); // timing stops until user hits ok 
},4000); 

Tôi biết bạn có thể có hộp thoại tùy chỉnh của bạn gọi một chức năng gọi lại vào người dùng nhập vào, nhưng tôi quan tâm đến việc có thể để buộc chặn hành vi này

+6

Thật không may, không có. Không có cách nào để thêm phương pháp chặn của riêng bạn, vì lý do bảo mật. –

+2

@EliGassert "Thật không may"? Lựa chọn số lẻ của các từ ;-) –

+0

@pst không may, bởi vì nó sẽ làm cho cuộc sống dễ dàng hơn cho các webdev để tạo các hộp thoại chặn "đẹp". Nhưng tôi đoán nó là may mắn vì nó sẽ rất dễ dàng để lạm dụng :) –

Trả lời

9

Có thể tạo thông báo phương thức tùy chỉnh 'chặn' việc thực thi tập lệnh cho đến khi người dùng nhập không?

Không. Không có cách nào để chặn thực thi hoặc tương tác người dùng hiệu quả như cửa sổ bật lên gốc (vì cửa sổ bật lên tùy chỉnh người dùng luôn có khả năng sử dụng công cụ dành cho nhà phát triển để thoát khỏi công cụ này).

Tuy nhiên, như pst cho biết trong các nhận xét về câu hỏi, hộp đèn không đồng bộ không phù hợp và gần như có hiệu quả trong việc chặn tương tác người dùng làm cửa sổ bật lên, vì vậy tôi khuyên bạn nên tìm một thư viện cung cấp hộp đèn bạn thích và chạy với cái đó.

Ví dụ: làm thế nào bạn có thể đạt được điều này mà không cần sử dụng chức năng cảnh báo/nhắc cửa sổ gốc?

Bạn không thể sử dụng đoạn mã đó để làm những gì bạn nói nó thậm chí với cửa sổ tự nhiên cảnh báo/chức năng nhắc sẽ (xem this fiddle - chờ 4 giây trước khi đóng cửa sổ popup). Bạn sẽ cần những điều sau đây:

function timeoutFunction() { 
    alert('Click OK to Continue'); // timing ACTUALLY stops until user hits ok 
    setTimeout(timeoutFunction, 4000); 
} 
setTimeout(timeoutFunction,4000); 

Điều gì đó bạn không thể thực hiện (chính xác - xem ở trên trên hộp đèn) mà không có quảng cáo gốc.

Ngay cả while(true) vòng thường không chặn cũng như cửa sổ bật lên - firefox ít nhất có thông báo "dừng tập lệnh" bật lên sau khi quá dài và tôi cũng chắc chắn các trình duyệt chính khác cũng vậy.

+0

Vâng, điều gì sẽ xảy ra nếu người ta cần ghi đè lên các chức năng đồng bộ javascript? (ví dụ: usercript) –

+0

@ TomášZato Tôi không chắc mình hiểu những gì bạn đang yêu cầu ... – Jeff

+0

Hãy tưởng tượng bạn phải ghi đè 'alert' bằng chức năng chặn tùy chỉnh, ví dụ: một cuộc gọi ajax hoặc một cái gì đó similary điên rồ. Nếu cuộc sống của bạn phụ thuộc vào nó, làm thế nào bạn sẽ làm điều đó? –

0

Không, bạn không thể (ít nhất là không trong trình duyệt). API Javascript hầu như không đồng bộ. alert/prompt là các ngoại lệ. Tuy nhiên, nó không phải là rất khó để làm việc với async nhắc nhở và callbacks.

+0

Điều này gây hiểu lầm. Nó ngụ ý rằng "tất cả mọi thứ ngoại trừ cảnh báo" là không đồng bộ, đó là sai. Tất nhiên, 'while (true) {1; } 'chỉ là như vậy (tức là không phải là rất) vui vẻ và mang lại một trang không phản hồi .. –

+4

' trong khi (đúng) 'không phải là và API, nó là một ngôn ngữ xây dựng! –

+2

Vì vậy, hãy chọn "API Javascript" của bạn. Nói, 'getElementById'. Đó là * không * không đồng bộ. –

-1

Một chút cũ, nhưng trong trường hợp nó giúp, tôi đã tìm thấy giải pháp của tôi với điều này:

var answer = confirm("are you sure?"); if(!answer)return;

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