我们有一个响应式网络应用程序,可在所有最新的各种桌面和移动浏览器上运行。使用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 / etc帐户登录用户。
我做了一些研究并尝试将fullscreen=yes
和dialog=no
添加到window.open()
来电的features parameter,但这些都没有效果。我还通过删除width=nnn
和height=nnn
功能设置(允许浏览器假定新窗口的完整可用屏幕大小)简单地使其工作,但这在一天之后神秘地停止工作或两个,事实上,我仍然在BrowserStack看到不一致的结果。
确切的功能字符串是:
"location=no,menubar=no,scrollbars=yes,resizable=yes,status=no,toolbar=no"
对fullscreen
,dialog
,width
和height
设置的各种排列/遗漏。
任何人都知道如何始终强制在此设备上创建全屏非弹出窗口?这可能只是一个BrowserStack问题吗? (由于显而易见的原因,我们无法配置或更改用户的浏览器,因为我们有数千名用户管理自己的设备。)
答案 0 :(得分:0)
在测试各种功能组合后,我们选择的解决方案是在打开新窗口时简单地省略所有功能(即提供空功能字符串)。
var w = window.open(url, "foo", ""); // Empty 3rd param
这似乎适用于Android(4.4)。