• 关于window.open弹出窗口被阻止的问题


    原文: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');

    微软的网站上的说明:http://technet.microsoft.com/zh-cn/library/cc766478(v=WS.10).aspx

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

  • 相关阅读:
    junit spring
    DFU协议介绍
    USB枚举过程
    触摸板单点描述符
    Linux下使用codeblocks交叉编译ARM-LINUX-GCC程序
    树莓派 原理图 摄像头接口定义
    usb描述符详细讲解
    常用的算法思想
    STM32f407 DCMI方式驱动 OV2640
    linux echo命令-转
  • 原文地址:https://www.cnblogs.com/weekend001/p/3835605.html
Copyright © 2020-2023  润新知