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

解决window.open 会被IE阻止的问题

2016-08-11 18:02 363 查看
转自:http://blog.csdn.net/fanfanjin/article/details/6858168

在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');" />

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: