如何在asp.net中关闭所有IE浏览器窗口?
我用window.open()打开了很多windows..from javascript ...我需要通过单击主页(父窗口)中的按钮来关闭所有窗口。
有时我们会在c# it self中打开
btnShow.Attributes.Add("onclick", @"var windowVar=window.open('" + sAppPath + @"', 'parent');windowVar.focus(); return false;");当时我如何在javascript中放入数组。
我该怎么做呢?
发布于 2009-12-16 14:19:14
Concept
无论何时从主页打开窗口,都要保留对打开的窗口的引用(将其推送到数组中效果很好)。单击主页按钮时,关闭每个引用的窗口。
客户端脚本
此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 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实例的东西在 (lots of samples)中进行enable 。
<%@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的情况下,不要刷新包含上述客户端脚本的页面部分,因为您希望它通过服务器回调持久化数组。
发布于 2009-12-16 14:22:48
您只需要保留对打开的窗口的引用,然后您可以通过调用它们的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" />发布于 2009-12-16 14:23:17
这可能是不可能的。您需要将JS消息发送到您尝试关闭的窗口。
referenceToWindowObject.close()由于您正尝试从主窗口执行此操作,因此不能将JS直接写入打开的窗口。
由于您试图从ASP.NET执行此操作,因此您可能会在原始窗口中加载一个新页面,因此(假设)您可能保留的任何句柄(调用window.open的返回值)都将丢失,因为它是一个新页面。
实现这一点的唯一方法是通过使用(例如)框架来保持手柄的位置。
https://stackoverflow.com/questions/1912667
复制相似问题