zoukankan      html  css  js  c++  java
  • window.open打开新窗口被浏览器拦截的处理方法

    一般我们在打开页面的时候, 最常用的就是用<a>标签,如果是新窗口打开就价格target="_blank"属性就可以了, 如果只是刷新当前页面就用window.location.reload(), 在某些特殊情况下也要用到另外一种新窗口打开的方法,就是window.open(),这个方法有一个问题就是会被基本所有的浏览器所拦截,要收到点击确认打开才可以,这样的体验可以说是非常不友好的~~ 感觉像一个有病毒的程序~~

    所以我们如果一定要用这个方法,但是又不想其被浏览器拦截, 有几种方法,都可以解决,具体如何~~

    第一种:

    //所以常用的方法就是在超链接里加入onclick事件,如
    <a href="javascript:void(0)" onclick="window.open()"></a>
    //这样用户点击这个超链接,浏览器会认为它是打开一个新的链接,所以就不会拦 截。

    第二种:

    setTimeout('window.open(url);', 500);
    //使用 setTimeout 包装一下,也可以防止被浏览器拦截。注意这里的超时时间不能太短,否则也会被拦截。

    第三种:

    //时候我们会遇到想要弹出一个窗口,可是却是在onckick事件执行后,才去弹出来的,这时就会被浏览器拦截,我们可以通过下面的方法来避免,就是 先用window.open打开一个窗口,然后修改地址。如
    var tempwindow=window.open('_blank');
    //打开一个窗口,然后用tempwindow.location='http://www.baidu.com';使这个窗口跳转到百度,这样就会呈现弹出百度窗口的效果了。

    但是这些方法多多少少有些不完美的地方,特别是在兼容IE浏览器方面,所以,最好是使用如下方法,亲测有用~~

    复制代码
    //写法1
    function openwin(url) {
        var a = document.createElement("a"); //创建a对象
        a.setAttribute("href", url);
        a.setAttribute("target", "_blank");
        a.setAttribute("id", "camnpr");
        document.body.appendChild(a);
        a.click(); //执行当前对象
    }
    
    //写法2
    function openUrl(url) {
        var a = $('<a href="'+url+'" target="_blank"></a>')[0];
        var e = document.createEvent('MouseEvents');
        e.initEvent('click', true, true);
        a.dispatchEvent(e);
    }
    
    //调用方法openwin(url) / openUrl(url)
    
    //原理都是通过创建一个a标签对象,通过里面自带的target执行跳转
    复制代码
     

       如果以上方法还是不行,就得检查你是不是在异步方法里面用了上面的的代码,js在异步方法里面用open打开新页面也会被浏览器拦截,

       所以将其写的同步方法中就可以正常了,如:用到http请求,你可以使用同步方法,异步改同步

      $.ajax( 
        type:”“, 
        data:{}, 
        async:false,  //异步为true,同步为false
        success: function(response){ 
    });

      

  • 相关阅读:
    vim lua对齐indent无效
    C中的私有成员
    Lua 设置table为只读属性
    c语言结构体可以直接赋值
    Lua5.3 注册表 _G _ENV
    火狐浏览器调试ajax异步页面时报错NS_ERROR_UNEXPECTER
    ajax向后台请求数据,后台接收到数据并进行了处理,但前台就是调用error方法
    maven安装之后,或者升级之后遇到的问题:could not find or load main class org.codehaus.plexus.class.....
    jenkins执行shell命令,有时会提示“Command not found”
    shell 脚本替换文件中某个字符串
  • 原文地址:https://www.cnblogs.com/flxy-1028/p/8401130.html
Copyright © 2011-2022 走看看