2012-08-03 137 views
1

我想在父窗口打開的子窗口的unload上執行javascript。我試過下面的代碼,它不調用該函數。window.unload在IE8中不工作

childWindow = window.open(url, 'MyWindow', GetWindowOptions(1020, 600), true); 
childWindow.onunload = function() { test(); }; 

而我寫的測試功能是:

function test() { 
alert(1); 
} 

我使用IE8瀏覽器。

回答

7

更換attachEvent代替onunload二傳手添加事件。我已經在IE6-8中測試過了,它工作正常。請確保您還使用addEventListener爲IE9 +和其他瀏覽器:

var unloadFunc = function() { test(); }; 
if (childWindow) { // null if a pop-up blocker does not create the window 
    if (childWindow.addEventListener) { 
     childWindow.addEventListener('unload', unloadFunc, false); 
    } else { 
     childWindow.attachEvent('onunload', unloadFunc); 
    } 
} 

顯然,如果URL是從不同的領域,這將無法正常工作。
如果要在不同來源已關閉的窗口中執行某個功能,請使用setIntervalsetTimeout輪詢布爾值屬性childWindow.closed的值。當窗戶關閉時這是真的。

例如:

if (childWindow) { // null if a pop-up blocker does not create the window 
    setTimeout(function checkState() { 
     if (childWindow.closed) { 
      // onunload Logic here. 
     } else { 
      setTimeout(checkState, 250); 
     } 
    }, 250); 
} 

注:其他答案建議使用beforeunload事件。請記住,specification允許實施在此事件期間忽略confirmalertpromptshowModalDialog調用。

+0

工作..謝謝!!!但是你能解釋我嗎爲什麼我的代碼不工作...我只是添加了一個簡單的卸載事件到我創建的窗口。 – TRR 2012-08-03 12:29:19

+0

@RutwikReddy IE忽略了二傳手 – 2012-08-03 12:40:16

+0

你是我的英雄 – hanesjw 2013-01-16 19:05:34

0

你可以試試onbeforeunload。我用這樣的事情在打印報告的內部網應用程序,做一個AJAX調用,以紀念這是印:

if (window.onbeforeunload) { 
    window.onbeforeunload = function() { didPrint(someData); }; 
} else { 
    window.onunload = function() { didPrint(someData); }; 
} 
+0

我試了一下......但是沒有運氣:( – TRR 2012-08-03 12:23:40

+0

你有什麼錯誤嗎?試試按F12並轉到腳本選項卡並按開始調試 – rcdmk 2012-08-03 15:05:01