打开/关闭“弹出”窗口时出现问题

时间:2009-12-16 06:29:38

标签: c# asp.net javascript

我有一个网络应用程序,可以从在线门户网站启动到新的浏览器窗口。一切正常,直到我尝试打开一个新窗口或从webapp关闭窗口。当我在本地测试时,一切正常。

据我所知,到目前为止,经过一些谷歌搜索后,似乎这是因为出于安全原因,您无法从服务器端调用客户端代码。我将发布我尝试为下面的打开和关闭功能实现的内容:

打开

String javaScript = "window.open('http://www.google.com', null, 'height=555,width=760,
                                  status=yes,toolbar=no,menubar=no,
                                  location=no, scrollbars=yes');";

ScriptManager.RegisterStartupScript(this, typeof(string), "OPEN_WINDOW", javaScript, true);

关闭

<a href="javascript:window.open('','_parent','');window.close();">Close Window</a>
以及简单的 <a href="JavaScript:window.close()">Close</a>
在HTML本身。

我知道这个问题之前已经被无数次询问了,但是我已经在论坛和Google中潜水,但仍然无法找到有用的东西,所以我感谢你们的任何帮助。

目前我怀疑问题在于尝试从另一个弹出窗口调用 打开 功能的弹出窗口,而对于 关闭 功能,服务器无法识别打开弹出窗口的窗口句柄。

编辑:

如果我不够清楚,我向所有人道歉。我将在这里尝试更详细地解释。

基本上,在我的网络应用程序中,我有两个按钮,打开和关闭 “打开”按钮将在全新的浏览器窗口中打开指向其他网站的链接 “关闭”按钮将关闭应用程序所在的浏览器窗口。

当我在本地测试它时,即localhost:xxxxx / Game.aspx,一切正常。但是,应用程序当前不驻留在从另一个浏览器窗口调用的单独弹出窗口中

在测试服务器上,应用程序从在线游戏存储库门户启动到新的浏览器窗口。

只是为了重新说明我希望它的运作方式:
1.用户登录游戏存储库页面
2.用户选择玩游戏 3.游戏弹出一个新的浏览器窗口
4.当用户点击“打开”按钮时,另一个新窗口弹出到特定网站(不起作用)
5.当用户单击“关闭”按钮时,游戏窗口自行关闭(不起作用)

我希望这会使问题更加清晰。感谢。

2 个答案:

答案 0 :(得分:1)

我不是完全得到你想说的话,但希望我能够理解。您需要在打开的窗口对象上调用Close()。所以将你的javascript更改为:

string js = "var myWindow = window.open('http://www.google.com', null, 'height=555,width=760,
                              status=yes,toolbar=no,menubar=no,
                              location=no, scrollbars=yes');";

ScriptManager.RegisterStartupScript(this, typeof(string), "OPEN_WINDOW", js, true);

然后在你的页面中:

<a href="JavaScript: if (typeof(myWindow) != 'undefined' && myWindow != null) myWindow.close()">Close</a>

如果有帮助,请检查this MSDN article

答案 1 :(得分:1)

将弹出窗口关联到一个变量,该变量可以帮助您控制将要关闭的窗口,因此:


// Define the variable for the popup window
// You can use this to check if the window was indeed opened, before attempting to close
var myOpenedWindow = '';

// Open Window
myOpenedWindow = window.open('http://www.google.com', Null, 'height=555,width=760, status=yes,toolbar=no,menubar=no, location=no, scrollbars=yes');

// Close Window Function
function closeMyWindow() {
    // Check for window instance being open
    if (myOpenedWindow != '') {
        // Close the window
        myOpenedWindow.close();
        // Clear the variable
        myOpenedWindow = '';
    }
}

// Close Window [DIRECT]
closeMyWindow();

/* OR */

// Close Window [FROM POPPED WINDOW]
window.opener.closeMyWindow();

有很多方法可以控制弹出的窗口,希望通过这些示例,您可以更好地了解如何控制它们。