js打開窗口一般也就是使用window.open方法:
win = window.open(CHILD_WINDOW_URL, CHILD_WINDOW_NAME, CHILD_WINDOW_ATTRS);
然后父窗口可以通過win 取得子窗口的引用,然后就可以檢測 win是否定義和win.closed來檢測窗口是否打開。
但是如果刷新父窗口,父窗口就會失去這些引用,那么我們如何再次檢測子窗口是否存在?
我想大概有以下方法:
方法一 使用cookie
打開子窗口的時候,子窗口或者父窗口可以寫一個cookie來標示子窗口是否打開,然后子窗口關閉的時候刪除這個cookie;這樣即使父窗口刷新,cookie依然存在,這樣父窗口就可以通過檢測cookie的存在來檢測子窗口是否存在,子窗口和父窗口可以跨子域。
方法二 本地存儲
方法基本和方法一一樣,但是子窗口和父窗口不能跨域,因為本地存儲不能跨域,子域也不可以。
方法三 window.open
無意發現了這個東東,很好的方法,我試了下兼容性很好,地址:測試地址;
其大體原理如此:
window.open(“”, CHILD_WINDOW_NAME, CHILD_WINDOW_ATTRS);
通過open一個相同的window名字且地址為空的窗口,通過判斷這個窗口的這個地址是否是”about:blank”,如果是,那么這個窗口已經關閉了(前提是前一個打開的地址不是空的)。
win = window.open("", CHILD_WINDOW_NAME, CHILD_WINDOW_ATTRS); if (win.location.href === "about:blank") { //窗口不存在 win = window.open(CHILD_WINDOW_URL, CHILD_WINDOW_NAME, CHILD_WINDOW_ATTRS); } else { //窗口以已經存在了 win.focus(); }
這是個不錯的方法,但是打開子窗口的時候,子窗口不能進行重定位,否則ie下會出現 拒絕訪問 的錯誤,具體的方法看看例子吧。
按照需求各取所需吧。
轉:http://hat1231676.blog.163.com/blog/static/931666520133225345033/