您的位置:首页 > 运维架构

window.open 会被IE阻止的问题

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



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

如果想要弹出窗口而不被阻止, 必须是用户点击之后使用window.open方可, 但是如果点击后有异步处理操作, 而且是在操作成功后再弹出, 那么这个新窗口就会被阻止了。

所以为了变通处理, 点击后就弹出一个空白的新窗口, 然后异步处理结束后再设定目标路径即可。

------------------------------------------------------------------------------------------------------------------------------

方案 1

如:

tempFunc=function(){

var item=prodGrid.getItem(0);

if(!item)return;

var orderItemId=prodStore.getValue(prodGrid.getItem(0),'purchaseOrderItemId');

var p=window.open('about:blank');

var xhrArgs = {

url: "buyFromPreparation.action?orderItemId="+orderItemId,

load: function(data){

prodStore.save();

prodStore.url='getPpi.action?currentCategory1='+currentCategory1;

prodStore.close();

prodGrid._refresh();

if(!p)alert("弹出的订单处理窗口被阻止了,请手动设置允许此窗口被打开。");

p.location='checkOrder.action?orderId='+data;

},

error: function(error) {alert(error);}

};

var d= dojo.xhrGet(xhrArgs);

};

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

最简单有效的方法如下:

在window.open()函数中增加一个参数,将target设置为‘self’,

即改为使用: window.open(link,'_self');

微软的网站上的说明:

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 Internet and Restricted sites zones 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 Trusted sites and Local intranet zones (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.

------------------------------------------------------------------------------------------------------------------------------------------------------------

方案 2

由于在使用window.open时,在很多情况下,弹出的窗口会被浏览器阻止,但若是使用a链接target='_blank',则不会,基于这一特点,自己封装了一个open方法:

function openwin(url) {

var a = document.createElement("a");

a.setAttribute("href", url);

a.setAttribute("target", "_blank");

a.setAttribute("id", "openwin");

document.body.appendChild(a);

a.click();

}

调用方式如下:

<input type="button" id="btn" value="百度" onclick="openwin('http://www.baidu.com');" />
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: