【问题标题】:Close current browser window or tab when popup opens弹出窗口打开时关闭当前浏览器窗口或选项卡
【发布时间】:2012-08-14 08:36:49
【问题描述】:

所以,我在一个网站上看到过这种方法(不过我不记得了),它的工作原理是这样的:

首先,有一个带有简单登录表单的简单页面。但是当您单击表单的登录按钮时,如果用户和密码的验证是肯定的并且服务器的响应也是肯定的,则会出现一个新的弹出窗口(其中包含用javascript编写的应用程序-ExtJS ) 并且浏览器的当前选项卡(即登录表单页面)关闭。

在我看来,这是一个很好的方法,因为ExtJS 是一个单页应用程序模式,功能强大到足以运行完整的AJAX,而没有可见的重定向。另外,弹出场景消除了浏览器页面控制按钮(后退、前进、刷新),地址栏是只读的。

现在,我试图通过使用 ASP.NET 作为服务器端脚本语言的帮助来重现这一点,其中 ExtJS 作为主要应用程序。所以,结果如下:

  1. 带有登录表单的登录页面 - HTML5 + CSS3
  2. 应用程序页面(弹出窗口) - 纯 ExtJS
  3. 网络服务 - ServiceStack

Web 服务公开用于登录目的的方法以及其他方法,并且它始终返回JSON 响应。在打开弹出窗口和关闭窗口之前,必须设置会话变量(如果登录成功)。

问题来了:

如果登录成功,我如何完成打开弹出窗口并关闭当前窗口/选项卡的场景?任何帮助、提示、参考、建议、批评完全是我的'我期待。

谢谢!

【问题讨论】:

    标签: asp.net extjs popup


    【解决方案1】:

    您应该可以在打开另一个窗口后关闭当前窗口。

    window.open('new window url'); window.close();
    

    我在我的盒子上试过这个,它在 chrome 和 safari 上运行良好

    <input type="button" onClick="window.open('popop.html'); window.close();" value="open" />
    

    【讨论】:

    • 感谢您的回复!问题是窗口没有在弹出窗口中打开,因此浏览器控制按钮仍然存在。在Firefox 14.0.1 中,它会打开一个新选项卡,但不会关闭当前选项卡。在Internet Explorer 9 中它要求关闭确认,而在Opera 11.64 中的工作方式与 Chrome 和 Safari 中的一样。
    • 编辑:Opera 12.01 也无法正常工作。它的行为就像Firefox 14.0.1
    • 你不想拥有浏览器控制按钮?
    • 顺便说一句,重定向到“新页面”和打开“新页面”弹出窗口并关闭当前页面有什么区别?
    【解决方案2】:

    如果您确实没有必要,请远离打开弹出窗口。所有现代浏览器都设置为默认阻止您打开弹出窗口。

    AFAIK 唯一 100% 打开新窗口(具有目标属性)的场景是用户单击的超链接。
    window.open() 甚至 document.getElementById("hiddenLink").click() 被某些浏览器阻止。

    这样做有什么真正的好处,还是只是该网站的虚假新颖性?您陈述的原因都适用于单窗口方案。

    【讨论】:

    • 是的,有。一个很大的优势是,在弹出窗口中,地址栏是只读的,我很喜欢。为什么?因为,AFAIK,客户用户不能将网站的位置(我的意思是地址)更改为另一个。这将防止任何 ajax 调用或语句未正确结束等。我唯一需要担心的是在用户跳过注销过程时捕获窗口的关闭事件以进行一些清理。后退和前进按钮在这里没有用(它是一个单页应用程序),刷新快捷方式可以被捕获和忽略。
    • @CosminT.:我同意,在某些情况下可能需要一个只读地址栏。前提是您的页面在其自己的窗口中运行。其余的原因值得怀疑。你在解决正确的问题吗?
    • 您的目标是:A. 一个单页应用程序,还是 B. 一个双窗口应用程序 A. 使用例如UpdatePanel 无需摆弄新窗口等。浏览器的行为方式(主要是安全性)和反对可能是痛苦的。用户也以这种方式使用网络。 B. 是并且将会是有问题的 AFAIK。决定权在你,我只是想帮忙。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-29
    • 2011-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多