2012-09-04 17 views
5

nên cho rằng tôi làm điều nàyphát hiện sự tồn tại của cửa sổ sau khi tải lại

var myWindow = false; 
$('someelement').click(function(){ 
    var myWindow = window.open('url', 'name', 'width=100,height=200'); 
}); 

để người dùng nhấp vào các yếu tố trên cửa sổ A và một cửa sổ mới (gọi nó là cửa sổ B) được mở ...

nhưng sau đó giả sử cửa sổ A được tải lại ... do điều này, var myWindow bây giờ được đặt thành false ... nhưng sau đó cửa sổ B vẫn mở .... làm thế nào tôi có thể phát hiện sự tồn tại của Window B từ cửa sổ A sau khi cửa sổ A được tải lại

Tôi biết rằng bạn có thể thực hiện việc này:

var hasWindow = window.open('', 'name'); 

và nó sẽ trả về một tham chiếu đến cửa sổ B nếu nó đã được mở ..

Nhưng sau đó nếu cửa sổ B là không mở được nêu ra, đây thay vào đó sẽ kích hoạt một mở cửa sổ, mà là không mong muốn

Làm thế nào tôi có thể có được một tham chiếu đến cửa sổ B nếu nó mở mà không kích hoạt một cửa sổ mới mở trong sự kiện trong đó cửa sổ B không mở? (không cần sử dụng các thủ thuật cookie)

Trả lời

1

Cách tốt nhất để giữ một bit trạng thái LITTLE mà không lưu trữ trong cookie là lưu một thứ gì đó vào window.name của bạn. Tuy nhiên, nó sẽ chỉ hoạt động với một chuỗi, vì vậy bạn sẽ cần phải lưu nó dưới dạng chuỗi JSON nếu bạn muốn nhiều hơn chỉ một bit dữ liệu.

Để đọc:

var keptState; 
if (window.name !== "") { 
    keptState = JSON.parse(window.name); 
} 

Để viết:

state = { 
    "popupOpened" : true, 
    "popupName" : "otherWindowName" 
}; 
window.name = JSON.stringify(state); 

Ở phía bên kia của refresh (hoặc thậm chí hướng đi từ trang web và sau), nó sẽ giữ cho các biến của bạn bạn truy nã. Nếu bạn thực sự muốn có một tham chiếu đến cửa sổ khác, tuy nhiên, bạn đang ở trên của riêng bạn cho điều đó. Tôi không thể nghĩ ra bất kỳ cách nào để xác định rằng nó thực sự ở đó. Điều này sẽ là một vấn đề nếu, nói rằng, ai đó đóng cửa sổ popup của riêng mình.

Ít nhất theo cách này, bạn có thể tìm hiểu xem bạn đã mở nó chưa. Sau đó, bạn có thể làm một popunder nếu bạn thực sự cần cửa sổ đó mà không có popup. Điều này luôn luôn cảm thấy một chút râm mát khi tôi làm điều đó, nhưng nó có lẽ là cách tốt nhất để làm những gì bạn đang yêu cầu.

var myWindow = window.open('', 'otherWindowName'); 
myWindow.blur(); 
window.focus(); 
Các vấn đề liên quan