Jiyp

安全限制

  曾经有一段时间,广告上在网上使用弹出窗口达到了肆无忌惮的程度。他们经常把弹出窗口打扮成系统对话框的模样,引诱用户去点击其中的广告。由于看起来像是系统对话框,一般用户很难分辨是真是假。为了解决这个问题,有些浏览器开始在弹出窗口配置方面增加限制。

  windows xp sp2中的IE6对弹出窗口私家了多方面的安全限制,包括不允许在屏幕之外创建弹出窗口、不允许将弹出窗口移动到屏幕以外、不允许关闭状态栏等。IE7则增加了更多的安全限制,如不允许关闭地址栏、默认情况下不允许移动弹出窗口或调整其大小。Firefox1 从一开始就不支持修改状态栏,因此无论给window.open()传入什么样的特性字符串,弹出窗口中都会无一例外的显示状态栏。后来的FIrefox3又强制始终在弹出窗口中显示地址栏。Opera指挥在主浏览器窗口中打开弹出窗口,但不允许他们出现在可能与系统对话框混淆的地方。

  此外,有点浏览器只根据用户操作来创建弹出窗口。这样依一来,在页面尚未加载完成时调用window.open()的语句根本不会执行,而且还可能会将错误消息显示给用户。换句话说,只能通过单击或者点鼠标来打开弹出窗口。

  对于哪些不是用户有意打开的弹出窗口,Chrome采取了不同的处理方式。他不会想其它浏览器那样简单的评比这些弹出窗口,而是只显示它们的标题栏,并把他们放在浏览器窗口的右下角。

  在打开计算机硬盘中的网页时,IE会解除对弹出窗口的某些限制。但是在服务器上执行这些代码会受到对弹出窗口的限制。

弹出窗口屏蔽程序

  大多数浏览器都内置有弹出窗口评比程序,而没有内置此类程序的浏览器,也有很多第三方的浏览器插件可供选择。结果就是用户可以将绝大多数弹出窗口屏蔽掉。于是,在弹出窗口被屏蔽时,应该考虑两种可能性。如果是浏览器内置的屏蔽程序阻止的弹出窗口,那么window.open()很可能会返回null。此时,只要检测这个返回值就可以确定弹出窗口是否被屏蔽了,如:

 var win = window.open("http://www.baidu.com"),"_blank");

if(win == null){

alert("弹出窗口被阻止");

}

如果是其它程序阻止了弹出窗口,将会抛出一个错误。所以可以用try-catch来捕获错误。

 

分类:

技术点:

相关文章: