這個問題幾乎全部在標題中。是否可以用javascript打開一個彈出窗口,然後檢測用戶何時關閉它?
是否有可能(以及如何?)用JavaScript打開彈出窗口,然後檢測用戶什麼時候關閉它?
我在項目中使用jquery,所以jQuery解決方案會很好。乾杯!
這個問題幾乎全部在標題中。是否可以用javascript打開一個彈出窗口,然後檢測用戶何時關閉它?
是否有可能(以及如何?)用JavaScript打開彈出窗口,然後檢測用戶什麼時候關閉它?
我在項目中使用jquery,所以jQuery解決方案會很好。乾杯!
如果你有在彈出的內容的控制,有處理窗口的unload
事件,並通過opener
物業通知原窗口,首先檢查開啓者是否已關閉。請注意,這不會在Opera中始終有效。
window.onunload = function() {
var win = window.opener;
if (!win.closed) {
win.someFunctionToCallWhenPopUpCloses();
}
};
因爲每當用戶在彈出的頁面導航離開,而不只是在關閉窗口,你應該檢查彈出已someFunctionToCallWhenPopUpCloses
實際關閉的unload
事件將觸發:
var popUp = window.open("popup.html", "thePopUp", "");
function someFunctionToCallWhenPopUpCloses() {
window.setTimeout(function() {
if (popUp.closed) {
alert("Pop-up definitely closed");
}
}, 1);
}
如果你沒有在彈出的內容的控制,或者如果你的目標瀏覽器一個不支持unload
事件,你在主窗口減少到某種輪詢的解決方案。調整適合的時間間隔。
var win = window.open("popup.html", "thePopUp", "");
var pollTimer = window.setInterval(function() {
if (win.closed !== false) { // !== is required for compatibility with Opera
window.clearInterval(pollTimer);
someFunctionToCallWhenPopUpCloses();
}
}, 200);
我推薦輪詢解決方案,而不是'unload'事件,因爲它與更多瀏覽器兼容(請參閱https://opera-bugs.jottit.com/)。 – 2012-05-16 16:28:00
@JonathonHill:同意。我在答案的早些時候提到了歌劇問題,但我應該更清楚地表達這一觀點。感謝編輯。順便說一句,在Opera中需要'window.closed!== false'的原因是什麼? – 2012-05-16 22:39:24
這是一個解決Opera中的bug的解決方法。我從https://opera-bugs.jottit.com/發現它。 – 2012-05-17 04:36:18
我現在唯一能想到的方法是在你的父頁面上創建一個函數,該函數在10秒後自動調用它自己的超時。在函數中,您還可以檢查cookie的值以查看它是真是假。當彈出窗口關閉時,將cookie設置爲true。
希望這會有所幫助。
忽略此。 AJM的方式要容易得多。 + rep – 2010-07-20 15:48:04
嘗試查看unload
和beforeunload
窗口事件。當通過一些被關閉的窗口這樣的監測,這些應該給你一個機會,打電話回來的時候DOM卸載:
var newWin = window.open('/some/url');
newWin.onunload = function(){
// DOM unloaded, so the window is likely closed.
}
非常感謝ajm。無論如何,有任何機會獲得彈出的網址? – Pablo 2010-07-20 15:51:04
這不適用於跨瀏覽器。你需要在彈出窗口中處理'unload'事件。 – 2010-07-20 15:53:57
每當有新的請求時,不僅在窗口關閉時卸載。 – 2010-07-20 17:28:32
如果你可以使用jQuery UI Dialog,它實際上有一個close
事件。
jQuery不是解決所有問題的方法:)。 – s4y 2010-07-20 20:41:34
確實如此。我應該用「if」一詞開始我的回答,如「如果您可以使用jQuery UI對話框」,而不僅僅是*假設*有可能。嘿!等一下... – eje211 2010-07-20 22:46:30
而且,談到JavaScript時,jQuery從來都不是問題的解決方案,但它通常是一個巨大的,巨大的**巨大**解決方案快捷方式,不管它是什麼。您可以通過採用風景路線瞭解更多信息,但在很多情況下,我和大多數人更喜歡(巨大,巨大,**巨大**)jQuery快捷方式。 – eje211 2010-07-20 22:49:40
是,辦理彈出窗口onbeforeunload事件,然後使用調用父窗口上的功能:
window.opener.myFunction()
要打開一個新的窗口,電話:
var wnd = window.open("file.html", "youruniqueid", "width=400, height=300");
如果你只是想要知道該窗口何時關閉,請使用onunload
。
wnd.onunload = function(){
// do something
};
如果您想要在用戶確認之前關閉它,請使用onbeforeunload
。
wnd.onbeforeunload = function(){
return "are you sure?";
};
這不適用於跨瀏覽器。您需要處理彈出文檔中的'unload'事件。 – 2010-07-20 16:00:43
每當有新的請求時,不僅在窗口關閉時卸載。 – 2010-07-20 17:29:07
我們在我的一個項目中工作。
訣竅是在您的父頁面中有一個JS函數,當彈出窗口關閉時您打算調用它,然後在彈出窗口中掛鉤卸載事件。
window.opener
屬性是指產生此彈出窗口的頁面。
例如,如果我寫了我原來的頁面上名爲callingPageFunction
功能,我把它叫做從彈出這樣的:
$(window).unload(function() {
window.opener.callingPageFunction()
});
有兩點需要注意:
有一個非常簡單的解決方案,您的問題。
首先製作一個新的對象,這將打開一個彈出這樣的:
var winObj = window.open('http://www.google.com','google','width=800,height=600,status=0,toolbar=0');
爲了知道什麼時候這個彈出窗口關閉,你只需要保持與類似下面的循環檢查這一點:
var loop = setInterval(function() {
if(winObj.closed) {
clearInterval(loop);
alert('closed');
}
}, 1000);
現在你可以用你想要的任何javascript代碼替換alert。
玩得開心! :)
一個彈出式瀏覽器? – Reigel 2010-07-20 15:43:59
定義「彈出」。我們在談論某種頁面渲染模式框嗎?一個JavaScript警報?一個新的瀏覽器窗口? – 2010-07-20 15:54:50
新的瀏覽器窗口...對不起我的缺乏清晰度 – Pablo 2010-07-20 15:58:14