我们有一个响应式web应用程序,旨在运行在所有最新的各种桌面和移动浏览器。我们在使用window.open()
打开新窗口时遇到了最新的Android默认浏览器(Samsung Galaxy S5, Android 4.4)的问题。浏览器似乎将任何这样的窗口视为"弹出"窗口(或"对话框"窗口或"子窗口")。这是一个问题,如果该窗口反过来试图使用window.open()
打开另一个窗口,在这种情况下,浏览器给出消息:
Pop-up already open
Only one pop-up can be open at a time
此行为在以前的(4.3)浏览器版本中不存在,我们在其他浏览器平台上也没有看到此问题。
这是一个特别棘手的问题,因为第二个"弹出"窗口需要通过他的Facebook/Google/等帐户登录用户。
我做了一些研究,并尝试将fullscreen=yes
和dialog=no
添加到window.open()
调用的特征参数中,但这些都没有效果。我还通过删除width=nnn
和height=nnn
功能设置(允许浏览器假设新窗口的全部可用屏幕尺寸)使其工作,但这在一两天后神秘地停止工作,事实上,我仍然看到BrowserStack上不一致的结果。
确切的特征字符串是:
"location=no,menubar=no,scrollbars=yes,resizable=yes,status=no,toolbar=no"
fullscreen
, dialog
, width
和height
设置的各种排列/省略
。
有人知道如何一致强制创建全屏非弹出窗口在这个设备上吗?是否有可能这只是一个BrowserStack问题?(由于显而易见的原因,我们不能配置或更改用户的浏览器,因为我们有成千上万的用户管理他们自己的设备。)
在测试了各种功能组合后,我们选择的解决方案是在打开新窗口时简单地忽略所有功能(即提供一个空的功能字符串)。
var w = window.open(url, "foo", ""); // Empty 3rd param