在Chrome和Safari中,当window.open附加在onload事件上时无法工作

4

我已经在表单的onload事件上附加了一些JavaScript代码。这个脚本包含window.open。虽然在所有浏览器中都可以正常工作,但是在Google Chrome和Firefox中,window.open不会打开新窗口,也不会给出任何错误消息。

我想先检查屏幕分辨率是否小于1024,如果是,则在没有菜单、工具栏和其他内容的新窗口中打开它,以便用户有更多的空间来工作。

2个回答

7

这是一种特性,而不是一个错误! :)

还记得在90年代时弹出窗口会让每个人都感到烦恼吗?由于JavaScript行为的大量滥用,现在唯一打开窗口的方式是通过直接用户交互,比如点击。


1
“回到90年代”?这些恐怖仍然存在,我的朋友! - Cerebrus
但是大多数浏览器都支持这个,我也想在Safari和Chrome中实现它,有什么办法可以做到吗? - Vinay Pandey
如果其他浏览器“支持”它,那么这些浏览器应该更新以阻止未请求的窗口。 - eyelidlessness
它不受其他浏览器的支持,即使是IE,在其更新版本中也配备了弹出窗口拦截器。别想了。 - bobince
我认为 Webkit 浏览器误判了此事,并应该将默认选项保持在“允许弹出窗口”上。我会自己选择是否要从我正在访问的网站获取内容,这不是浏览器决定的。 - BBQ
Chrome的一个大问题是无法检测弹出窗口是否被阻止。window.open函数会返回一个窗口对象,而在Firefox中它会返回null。如何检测已阻止的弹出窗口并给用户提供点击选项? - BBQ

3
如果您有合法的理由需要打开另一个窗口,可以给标为“打开窗口”的按钮附加一个 click 事件。这样会更准确地告知用户您将要打开一个新窗口。如果用户想打开窗口,他们可以自行操作,这样就能避免除最简单的弹出屏蔽器以外的其他所有问题。如果用户不想打开窗口,那么您也不应该在第一次尝试时打开窗口。

1
但是你不能更改客户机上的设置。不要依赖于人们关闭弹出窗口拦截器,以便你可以避免告知他们将要打开一个未经请求的新窗口! - eyelidlessness
Chrome出现了一些奇怪的问题。如果您创建一个页面,其中onload或jQ ready触发一个window.open,并且该窗口对打开者执行某些操作(尝试使其更改颜色),请注意即使子窗口未显示,js也会被执行!?嗯!? - Mr AH

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接