Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1101535
  • 博文数量: 1310
  • 博客积分: 3980
  • 博客等级: 中校
  • 技术积分: 8005
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-09 22:05
文章分类

全部博文(1310)

文章存档

2011年(1)

2008年(1309)

我的朋友

分类:

2008-11-09 15:55:30

作者: sealyu   日期:2008-11-8

今天在开发的时候,碰到客户提到的一个问题,
每次在下载文件的时候,IE都会阻止打开的保存文件的对话框。
看了一下代码,发现项目使用了一个stream servlet来处理文件下载,在使用ajax返回页面后,使用window.open(link);打开保存对话框。
问题应该就处在这里了,Google了一下,发现这是由于IE的安全机制。
在微软的网站上有这么一段话:

Pop-Up Blocking

The Pop-up Blocking feature blocks pop-up (and pop-under) windows initiated automatically by a Web site. Internet Explorer blocks Pop-up windows in the by default. However, the Pop-up Blocker enables pop-up windows initiated by a user action. Users can configure Internet Explorer 6 for Windows XP with SP2 to be more or less restrictive. Users can also turn off the Pop-up Blocker altogether. Generally, the Pop-up Blocker enables a window to open under the following circumstances:

When initiated by user action, such as clicking a button or hyperlink

When opened in the (considered safe)

When opened by other applications running on the local computer

The affected script methods are:

window.open

window.showHelp

window.showModalDialog

window.showModelessDialog

window.external

window.NavigateAndFind
注:

Pop-ups created with window.createPopup are unaffected by the Pop-up Blocker.

在web编程过程中,经常会遇到一些页面需要弹出窗口,但是在服务器端用window.open弹出的窗口会被IE阻止掉,弹出的窗口有时并不能满足我们需要,我们需要弹出新的浏览器窗口。

 为什么我们编写的弹出窗口会被IE阻止呢,原来IE会自动判断弹出窗口的状态,它会阻止自动弹出的窗口,而通过我们用鼠标点击弹出的窗口,它是不会阻止的。这里就有一个问题,有人说:我的程序是写在服务器按钮里的,也是通过鼠标点击弹出的呀!其实只有在加载页面后,我们点击到弹出这段时间页面没有被重新加载的情况下,弹出的窗口才不会被阻止!这也就是说,写在服务器控件的回传事件里的window.open都会被阻止。

继续Google解决办法,在分析了几种解决方法并进行对比之后,发现最简单有效的方法如下:
在window.open()函数中增加一个参数,将target设置为‘self’,
即改为使用: window.open(link,'_self');
问题解决。




seal 2008-11-08 17:16 发表评论
阅读(330) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~