2009-12-16 36 views
3

Как я могу закрыть все окна браузера IE в asp.net,Как я закрыть все окна браузера IE, который я открыл в JavaScript

Я открываю много windows..from JavaScript на window.open() ... Мне нужно закрыть все окна, нажав кнопку на главной странице (родительское окно).

несколько раз мы имеем открыть в C# это сам

btnShow.Attributes.Add("onclick", @"var windowVar=window.open('" + sAppPath + @"', 'parent');windowVar.focus(); return false;"); 

в то время как я могу положить в массив в JavaScript.

Как я могу это сделать?

ответ

10

Концепция

Всякий раз, когда вы открываете окно с главной страницы, сохранить ссылку на открывшемся окне (толкая его на массив хорошо работает). Когда нажата кнопка главной страницы, закройте каждое окно с ссылкой.

Client Script

Этот JavaScript для главной страницы. Это работает для страницы HTML или ASPX.

var arrWindowRefs = []; 
//... assume many references are added to this array - as each window is open... 

//Close them all by calling this function. 
function CloseSpawnedWindows() { 
    for (var idx in arrWindowRefs) 
     arrWindowRefs[idx].close(); 
} 

Открытие окна и толкая его на выше массив выглядит примерно так:

// Spawn a child window and keep its reference. 
var handle = window.open('about:blank'); 
arrWindowRefs.push(handle); 

Microsoft's JavaScript window.open(..) method and its arguments are outlined here.

В разных браузерах могут быть варианты или собственные способы сохранить ссылки на открытые окна или перечислить их, но этот чистый способ JavaScript очень совместим с браузерами.

Кнопка

Наконец кнопку Input HTML инициировать приведенный выше код будет

<input type="button" 
    name="btn1" id="btn1" value="Click Me To Close All Windows" 
    onclick="CloseSpawnedWindows()"> 

Если это элемент управления Button ASP.NET затем вызвать JavaScript таким образом

<asp:Button ID="Button1" runat="server" Text="Click Me To Close All Windows" 
     OnClientClick="CloseSpawnedWindows()" /> 

клиент сценария Устранение неполадок ASP.NET (PostBack и AJAX исправление)

Если ASPX страница сообщений обратно на сервер, клиентский код будет разрушен, и потерять это массив с оконными ребенком ссылки (и эти окна будут остаются открытыми). Если это вызывает беспокойство, вы можете использовать AJAX для частичного обновления страниц, чтобы предотвратить уничтожение всей страницы и ее скриптов.

(показано с помощью Framework 3.5 образцов)

Для ASP.NET AJAX вы будете использовать что-то вроде ScriptManager инстанции enable partial page refresh внутри UpdatePanel controls (lots of samples).

<%@Page... %> 

<asp:ScriptManager EnablePartialRendering="True" /> Enable AJAX. 

<script> 
// PUT JAVASCRIPT OUT HERE SOMEWHERE. 
// Notice the client script here is outside the UpdatePanel controls, 
// to prevent script from being destroyed by AJAX panel refresh. 
</script> 

<asp:UpdatePanel ID="area1" runat="server" ... > ... </asp:UpdatePanel> 
<asp:UpdatePanel ID="area2" runat="server" ... > ... </asp:UpdatePanel> 
etc... 

Более подробная информация об ASP.NET AJAX может быть предоставлена, но это только начало, если оно вам понадобится.

Помните, что в случае AJAX не обновляйте часть страницы, содержащую указанный выше клиентский скрипт, потому что вы хотите, чтобы она сохраняла массив через обратные вызовы сервера.

2

Вам просто нужно сохранить ссылки на открытые окна, после чего вы можете закрыть их в любое время, вызвав их метод close(), например.

<script> 
var myWindow = window.open('http://www.google.com/'); 
var myWindow2 = window.open('http://www.bing.com/'); 

function closeAll() 
{ 
    myWindow.close(); 
    myWindow2.close(); 
} 
</script> 

<input type="button" onclick="closeAll();" value="Close all" /> 
0

Возможно, это невозможно. Вам нужно получить сообщение JS для окон, которые вы пытаетесь закрыть.

referenceToWindowObject.close() 

Так как вы пытаетесь сделать это из главного окна, вы не можете писать JS непосредственно в открывшемся окне.

Поскольку вы пытаетесь сделать это из ASP.NET, вы предположительно загружаете новую страницу в исходное окно, поэтому (предположительно) любые дескрипторы, которые вы могли бы сохранить (возвращаемое значение от вызова до window.open) будет потерянный, поскольку это новая страница.

Единственный способ, которым вы могли бы достичь этого, - это держать ручки вокруг, используя (например) кадры.

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