如何关闭我在JavaScript中打开的所有IE浏览器窗口

时间:2009-12-16 06:15:34

标签: asp.net javascript

如何关闭asp.net中的所有IE浏览器窗口,

我通过window.open()从javascript打开很多窗口... 我需要通过单击主页面(父窗口)中的按钮来关闭所有窗口。

有些时候我们已经在c#中打开了自己

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

当时如何在javascript中放入数组。

我该怎么做?

3 个答案:

答案 0 :(得分:10)

<强>概念

每当您从主页面打开一个窗口时,请保持对打开的窗口的引用(将其推入阵列效果很好)。单击主页面按钮时,关闭每个引用的窗口。

客户端脚本

此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方式与浏览器非常兼容。

按钮

最后,启动上述代码的 HTML输入按钮将是

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

如果是 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,请不要刷新包含上述客户端脚本的页面部分,因为您希望它通过服务器回调来保持阵列

答案 1 :(得分: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" />

答案 2 :(得分:0)

这可能是不可能的。您需要向要关闭的窗口获取JS消息。

referenceToWindowObject.close()

由于您尝试从主窗口执行此操作,因此无法将JS直接写入打开的窗口。

由于您尝试从ASP.NET执行此操作,因此您可能会在原始窗口中加载新页面,因此(可能)您可能保留的任何句柄(调用window.open的返回值)因为它是一个新的页面,它将会丢失。

唯一可以实现此目的的方法是使用(例如)框架来保持手柄。