2008-10-30 34 views
6

Có cách nào tốt để xác định xem một người có trình chặn cửa sổ bật lên được bật không? Tôi cần phải duy trì một ứng dụng web mà tiếc là có rất nhiều cửa sổ bật lên trong suốt nó và tôi cần phải kiểm tra xem người dùng đã bật trình chặn cửa sổ bật lên chưa.Phát hiện cửa sổ bật lên trước khi người dùng đăng nhập

Cách duy nhất tôi tìm thấy để thực hiện việc này là mở một cửa sổ từ javascript, kiểm tra xem nó có mở để xác định xem trình chặn có được bật hay không và đóng ngay lập tức.

Điều này hơi khó chịu vì người dùng không bật tính năng này sẽ thấy một đèn flash nhỏ trên màn hình khi cửa sổ mở ra và đóng ngay lập tức.

Có phương pháp không gây khó chịu nào khác để thực hiện việc này không?

Trả lời

6

đọc Detect a popup blocker using Javascript:

Về cơ bản bạn kiểm tra xem phương pháp 'window.open' trả về một xử lý cho một cửa sổ mới mở.

Trông như thế này:

var mine = window.open('','','width=1,height=1,left=0,top=0,scrollbars=no'); 
if(mine) 
    var popUpsBlocked = false 
else 
    var popUpsBlocked = true 
mine.close() 
+1

này rất giống với những gì tôi có rồi. Tôi đang tìm một phương pháp không phô trương hơn, mặc dù tôi đoán điều đó là không thể. –

1

Tôi không nghĩ rằng có bất kỳ cách nào phát hiện điều này mà không tìm cách mở cửa sổ, vì trình chặn cửa sổ bật lên không thêm bất kỳ thứ gì có thể được thẩm vấn trong JS.

2

Như những người khác đã nhận xét, cách duy nhất để tìm hiểu cho chắc chắn là để thử nó.

Tuy nhiên, câu trả lời gần đúng về câu hỏi "là trình chặn cửa sổ bật lên được cài đặt" là, những ngày này, "có". Tất cả các trình duyệt gần đây sẽ chặn cửa sổ bật lên của bạn theo mặc định, vì vậy, bạn nên thiết kế ứng dụng của mình để đối phó một cách duyên dáng với điều này. Cụ thể, không cố gắng window.open ngoại trừ trong phản ứng với một tương tác người dùng (thường onclick), và bạn sẽ được sử dụng tốt.

0

Cửa sổ bật lên được mở để phản hồi lại hành động của người dùng — chẳng hạn như nhấp vào liên kết — không bị chặn bởi trình chặn cửa sổ bật lên.

+0

Tôi có thể hiểu tại sao tác giả muốn làm điều này. Trong ứng dụng của chúng tôi, vào thời điểm người dùng đã bắt đầu một hành động yêu cầu một cửa sổ riêng biệt, họ đã nhập vào khá nhiều dữ liệu. Nếu trình chặn cửa sổ bật lên đang hoạt động, thì người dùng chọn cho phép cửa sổ mới, trình duyệt thường làm mới cửa sổ mà ứng dụng gốc cũng đang bật, nghĩa là dữ liệu của họ bị mất do ứng dụng Flex/Flash của chúng tôi được tải lại. –

3

Như những người khác đã nói, bạn sẽ phải thử và xem, nhưng việc kiểm tra đối tượng cửa sổ kết quả là không "sai" là không đủ cho tất cả các trình duyệt.

Opera vẫn trả về một đối tượng Window khi một popup bị chặn, vì vậy bạn phải kiểm tra các đối tượng đủ để xác định xem đó là một cửa sổ thật:

var popup = window.open(/* ... */); 
var popupBlocked = (!popup || typeof popup.document.getElementById == "undefined"); 
Các vấn đề liên quan