【问题标题】:window.close closes the postbacked child window and a copy of child window still appearswindow.close 关闭回发的子窗口,并且仍然出现子窗口的副本
【发布时间】:2013-08-08 20:16:09
【问题描述】:

我正在使用以下代码打开一个子窗口:

window.showModalDialog("FileUpload.aspx", "FileUpload", 
    "center:yes;resizeable=yes;dialogHeight:300px;dialogWidth:600px;");

我将在子窗口(FileUpload.aspx)中上传的文件保存在 FileUpload.vb 页面后面的代码中。 由于服务器端代码,它的回发和打开一个新的浏览器。

在子窗口中使用我的功能后,当我使用以下代码关闭它时,

window.open('', '_self', '');
window.close();

它正在关闭由于回发而打开的新浏览器,但是当返回父页面时,同一子窗口的副本仍然打开。

我想关闭这个子窗口的所有实例。

【问题讨论】:

  • 我认为您不需要在“_self”上致电window.open。这只是一个 ie hack,让浏览器相信您拥有关闭当前窗口的权限,因为您是所有者。由于您已经是使用showModalDialog 打开它的人,您可以致电window.close();

标签: javascript


【解决方案1】:

showModalDialog 方法将冻结父窗口上的 JavaScript 执行,直到它打开的对话框关闭,因此我们可以排除第二个窗口打开的原因。当FileUpload.aspx 从服务器回发时,它的工作方式应该与无模式 aspx 回发相同。

我认为你应该能够摆脱window.open() 方法,你应该没问题。

父窗口:

window.showModalDialog("FileUpload.aspx", "FileUpload", 
    "center:yes;resizeable=yes;dialogHeight:300px;dialogWidth:600px;");

子窗口会在完成后调用它。

window.close();

【讨论】:

  • 感谢凯尔的回复。模态对话框按预期运行,但由于为其编写了服务器端代码,它正在打开一个新浏览器并执行服务器端操作。当我关闭窗口时,它关闭了新窗口已打开但似乎仍然出现另一个副本
  • 服务器端代码不需要自己打开一个新的浏览器,除非你告诉它。既然您怀疑问题出在哪里,您能否发布一些相关的服务器端代码部分?更好的是,你能上传一个用尽可能少的代码重现问题的解决方案吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-15
  • 1970-01-01
  • 2013-02-14
  • 1970-01-01
相关资源
最近更新 更多