js如何檢測打開窗口是否存在的三個方法?


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/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM