2012-10-11 45 views
0

我需要區分用戶使用X關閉按鈕關閉彈出窗口並關閉代碼。使用javascript識別彈出窗口的X關閉事件

var win= window.showModelessDialog("http://localhost/test/test.aspx",'google,....); 
//Some manipulations    
//Manipulation ends 
if(win!=null && win.open) 
{ 
win.close(); 
} 

現在我有超過Test.aspx的完全訪問權限,並test.aspx.cs.I在Test.aspx的頁面定義一個onbeforeunload方法將被稱爲無論哪種方式,我關閉窗口(X接近或我的代碼被執行),我基本上要區分我的X關閉和計劃關閉,這樣我可以做一些後臺操作

回答

1

像這樣的東西可能:

var MyPopup = { 

    _win : null, 

    _userClosingWindow : true, 

    open : function() { 
    var _this = this; 
    this._win = window.open(...); 
    this._win.onbeforeunload = function() { 
     if(_this._userClosingWindow) { 
     // closed by user 
     } 
     else { 
     // closed in code 
     } 
    }; 
    }, 

    close : function() { 
    this._userClosingWindow = false; 
    this._win.close(); 
    } 

}; 

然後你可以使用MyPopup.open()和MyPopup。關閉()並且仍然知道何時關閉函數on被調用或當用戶關閉彈出窗口時。

+0

會試試這個並更新你。如果它能正常工作,請將其標記爲正確答案 – Harish

+1

這個概念很有效,但我不確定代碼是否100%正確。 – xCander

+0

this._win.onbeforeunload = function(){is not triggered :( – Harish

1
// parent 
function closePopup(win) { 
    win.close(); 
    // do the magic stuff... 
} 


// popup (test.aspx) 
function closeMe() { 
    self.opener.closePopup(window); 
} 

更新
作爲您的評論的,只是檢查彈出的closed財產。如果是false,在彈出的仍然是開放的,否則它已經被我實際使用window.showModelessDialog關閉

if (win.closed === false) { 
    win.close(); 
    // do magic stuff here 
} 
+0

closeMe被調用onBeforeunload? – Harish

+1

當編程調用closeMe()而不是'test.aspx'中的'window.close()'時,彈出窗口被關閉。 – Andreas

+0

我編程式地從父窗口關閉窗口:( – Harish