2012-08-14 74 views
1

所以,我已经看到了一个网站这种做法(我不记得了,虽然)和它的工作原理是这样的:关闭当前窗口或标签时,弹出打开

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

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

现在,我试图通过使用ASP.NET作为服务器端脚本语言的帮助,将ExtJS作为主要应用程序进行重现。因此,其结果将是如下:

  1. 登录页面,登录表单 - HTML5 + CSS3
  2. 应用页面(弹出窗口) - 纯粹的ExtJS
  3. Web服务 - ServiceStack

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

在这里,问题来了:

如何可以完成打开一个弹出和关闭当前窗口/标签如果登录成功,这种情况发生?任何帮助,提示,参考,建议,批评完全是我所期待的。

谢谢!

回答

1

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

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

我想这对我的盒子,并且它运作良好,在Chrome和Safari

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

谢谢你的回复!问题是窗口不能在弹出窗口中打开,因此浏览器控制按钮仍然存在。在Firefox 14.0.1中,它会打开一个新标签,并且不会关闭当前标签。在“Internet Explorer 9”中,它要求关闭确认,而在“Opera 11.64”中,就像在Chrome和Safari中一样。 – 2012-08-14 09:33:23

+0

编辑:它在Opera 12.01中也不能正常工作。它的行为就像“Firefox 14.0.1'' – 2012-08-14 11:56:32

+0

你不想拥有浏览器控制按钮? – fengd 2012-08-14 15:37:37

0

从打开的弹出窗口请路程,如果你真的不必。所有现代浏览器都设置为防止默认打开弹出窗口。

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

这样做是否有真正的好处,还是只是该网站的虚假新颖?您陈述的原因在单窗口情况下都很好。

+0

是的,有。一个巨大的优势是,在弹出窗口中,地址栏是只读的,而我是gusta。为什么?因为,AFAIK,客户端用户不能将网站的位置(我的意思是地址)更改为另一个。这样可以防止任何ajax调用或语句没有正常结束等等。我唯一需要担心的是如果用户跳过注销过程,则会捕获窗口的关闭事件以执行一些清理。后退和前进按钮在这里是无用的(它是一个单页面应用程序),刷新快捷键可以被捕获和忽略。 – 2012-08-14 12:18:13

+0

@CosminT .:在某些情况下,可能需要只读地址栏,我同意。如果您的页面正在自己的窗口中运行。 其余的原因是有问题的。你是否解决了正确的问题? – 2012-08-16 08:23:35

+0

“解决正确的问题”是什么意思? – 2012-08-16 14:21:45

相关问题