2012-06-06 39 views
0

我有一個C#aspx web應用程序,它使用JavaScript打開一個彈出窗口。我捕獲窗口句柄並將該值放入數組中。當Web應用程序關閉時,我想關閉彈出窗口。當我詢問數組時,窗口句柄不再位於數組中,所以我找不到要關閉它的窗口。這種行爲對我來說很奇怪,因爲其他彈出窗口(不包含silverlight)將保留在數組中,並在應用程序結束時關閉。關閉包含silverlight的Javascript彈出窗口

起初,我認爲這是可以用框架解決的問題,比如彈出式窗口包含的PDF不能被關閉,但是這個解決方案在我這裏不起作用。 This was something I had to use with PDFs

問:如何在aspx主窗口關閉時關閉包含Silverlight的彈出窗口?

一些JavaScript代碼:

var openedWindows = new Array(); 
function OpenNamedWindow(url, name, features, replace) 
{ 
    var oWin = open(url, name, features, replace); 
    // The Silverlight window object is within this array afterwards, and in subsequent calls 
    // to this method 
    openedWindows.push(oWin); 
} 

function CloseOpenedWindows() 
{ 
    while (openedWindows.length > 0) 
    { 
     var window = openedWindows.shift(); 
     if(!window.closed) 
      window.close(); 
    } 
} 

主ASPX表(略)

<html> 
    <body onunload="CloseOpenedWindows();"> ... <body/> 
</html> 

回答

0

原來,包含了

012 JavaScript文件
var openedWindows = new Array(); 

被加載了多次,所以JavaScript弄糊塗了它需要迭代哪個數組。確保只有一次加載js文件解決了問題。

0

你可以試試這個代碼,不涉及到C#和Silverlight。我不會聲明一個變量'window',而且我肯定會把close事件'unload'附加到'window'上。

HTML:

<button id=openwindow>open new window</button> 
<br /> 
<a href="http://jsfiddle.net/">go to another page and close this</a> 

的javascript:

// lib AttachEvent 
function AttachEvent(obj, evt, fnc, useCapture) { 
    if (!useCapture) useCapture = false; 
    if (obj.addEventListener) { 
     obj.addEventListener(evt, fnc, useCapture); 
     return true; 
    } else if (obj.attachEvent) return obj.attachEvent("on" + evt, fnc); 
    else { 
     MyAttachEvent(obj, evt, fnc); 
     obj['on' + evt] = function() { 
      MyFireEvent(obj, evt) 
     }; 
    } 
}; 
// lib AttachEvent 

var windowOpenControl = { 
    __cache: [], 
    open: function(url, name, features, replace) { 
     var w = window.open(url, name, features, replace); 
     this.__cache.push(w); 
    }, 
    closeAll: function() { 
     try { 
      var c = this.__cache.length; 
      for (var i = 0; i < c; i++) { 
       this.__cache[i].close(); 
      } 
     } catch (e) {} 
    } 
}; 

var 
button = document.getElementById('openwindow'), 
    counter = 0; 

AttachEvent(button, 'click', function() { 
    windowOpenControl.open("http://www.google.com", 'mywindow_' + (counter++)); 
}); 

AttachEvent(window, 'unload', function() { 
    windowOpenControl.closeAll(); 
});​ 

run example