2012-06-06 8 views
0

У меня есть веб-приложение C# aspx, которое открывает всплывающее окно с JavaScript. Я захватываю дескриптор окна и помещаю это значение в массив. Когда веб-приложение закрывается, я хочу закрыть всплывающее окно. Когда я допрашиваю массив, дескриптор окна больше не находится в массиве, поэтому я не могу найти окно, чтобы закрыть его. Это поведение странно для меня, поскольку другие всплывающие окна (которые не содержат silverlight) останутся в массиве и будут закрыты, когда приложение закончится.Закрыть всплывающее окно Javascript, содержащее silverlight

Сначала я подумал, что это то, что можно решить с помощью фрейма, например всплывающие окна, содержащие PDF-файлы, которые невозможно закрыть, но решение для этого не сработало для меня. This was something I had to use with PDFs

Вопрос: Как закрыть всплывающее окно, содержащее Silverlight, когда основное окно aspx закрывается?

Часть кода 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

Оказывается, что Javascript файл, который содержал

var openedWindows = new Array(); 

загружался несколько раз, поэтому javascript запутался в том, какой массив ему нужно перебирать. Убедитесь, что файл js был загружен только после решения проблемы.

0

вы можете попробовать этот код, не относящийся к C# и Silverlight. Я бы не объявлял переменное «окно», и я, несомненно, приложил бы закрытое событие «выгрузить» в «окно».

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

Смежные вопросы