2008-10-21 75 views
5

Tôi đang mở một cửa sổ trình duyệt mới từ trang web của tôi cho một số thành viên. Tuy nhiên, một số sau đó có thể đóng cửa, hoặc ban đầu nó có thể không mở được.Làm cách nào để xác nhận cửa sổ trình duyệt đang mở, với Javascript?

Có đoạn trích Javascript khá đơn giản có thể chạy trên mỗi trang để xác nhận xem cửa sổ trình duyệt khác có đang mở hay không và nếu không, sẽ cung cấp liên kết để mở lại?

[làm rõ:] Mã để kiểm tra là cửa sổ đang mở sẽ được chạy trên các trang khác - không chỉ trong cùng một cửa sổ và URL đã mở nó. Hãy tưởng tượng một người dùng đăng nhập, cửa sổ (cố gắng) mở, và sau đó họ lướt xung quanh trong cùng một tab/cửa sổ (hoặc những người khác) một thời gian trước khi họ đóng cửa sổ thứ 2 (hoặc nó không bao giờ mở) - Tôi muốn có thể để thông báo cửa sổ đã được đóng lại một thời gian sau lần mở đầu tiên/sau khi đóng, vì vậy tôi không chắc chắn rằng việc kiểm tra sự trở lại của javascript từ window.open() (với popup_window_handle.closed) có thể dễ dàng sử dụng, hoặc thực sự có thể .

Trả lời

4

này excellent, comprehensive article("Hầu như hoàn toàn kiểm soát cửa sổ popup") nên trả lời tất cả câu hỏi của bạn về cửa sổ popup javascript.

"JavaScript 1.1 cũng giới thiệu các cửa sổ đóng tài sản. Sử dụng thuộc tính này, nó có thể phát hiện nếu một cửa sổ đã được mở và sau đó đóng lại. Chúng ta có thể sử dụng để tải một trang trực tiếp vào cửa sổ mở nếu nó vẫn mở cho JavaScript 1.1 cho phép các trình duyệt:"

<script language="JavaScript"><!-- 
function open_main(page) { 
    window_handle = window.open(page,'main'); 
    return false; 
} 
//--></script> 

<script language="JavaScript1.1"><!-- 
function open_main(page) { 
    if (opener && !opener.closed) { 
     opener.location.href = page; 
    } 
    else { 
     window_handle = window.open(page,'main'); 
    } 
    return false; 
} 
//--></script> 

<a href="example.htm" onClick="return open_main('example.htm')">example.htm</a> 

Addition: Bạn có thể lấy cửa sổ xử lý trở lại trong một trang khác bằng cách tham khảo tên của cửa sổ bật lên theo cách này:

012.
window_handle = window.open(page,'myPopupName'); 

Tôi đoán trong trường hợp của bạn, bạn nên suy nghĩ về một cách nhất quán để tạo tất cả tên của cửa sổ bật lên trong toàn bộ ứng dụng.

1
var myWin = window.open(...); 

if (myWin.closed) 
{ 
    myWin = window.open(...); 
} 
+0

Biến 'myWin' sẽ có sẵn trong bao lâu? Chỉ trong khi nó trên cùng một trang? –

+0

@ Topbit: Có, nhưng bạn có thể yêu cầu cửa sổ xử lý lại điều này bằng cách tham chiếu đến tên của cửa sổ bật lên theo cách này: window_handle = window.open (trang, 'myPopupName'); - Tôi thực sự khuyên bạn nên đọc bài viết liên kết trong câu trả lời của tôi (splattne). – splattne

0

Không có cách phổ biến nào để kiểm tra vì mỗi trình chặn cửa sổ bật lên có hành vi khác nhau. Ví dụ, Opera sẽ không hiển thị cửa sổ bật lên nhưng widow.closed sẽ trả về false như sau cảnh Opera giữ một bản sao ẩn của cửa sổ bị chặn, chỉ trong trường hợp người dùng vẫn muốn xem nó.

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