背景

当前的浏览器为了保证用户体验,在很多场合下禁止了window.open打开新窗口,下面就给出一些方案,最大程度上的实现新窗口打开一个链接。

方案

//打开新链接方法实现
function windowOpen(){
var a = document.createElement("a");
a.setAttribute("href", url);
if(target == null){
target = '';
}
a.setAttribute("target", target);
document.body.appendChild(a);
if(a.click){
a.click();
}else{
try{
var evt = document.createEvent('Event');
a.initEvent('click', true, true);
a.dispatchEvent(evt);
}catch(e){
window.open(url);
}
}
document.body.removeChild(a);
} //新窗口打开
windowOpen('http://niu.xunlei.com/', '_blank');
//当前窗口打开
windowOpen('http://niu.xunlei.com/', '_self');

思路

其实做法很简单,首先模拟A标签点击打开新窗口,若失败再直接调用window.open方法。

问题

目前无法在异步的情况下调用该方法。如下:

//以下做法将得不到期望的结果,会被浏览器阻止
$.get("http://www.a.com/ajax",function(){
windowOpen('http://niu.xunlei.com/', '_blank');
});

本文为原创文章,转载请注明出处:http://www.cnblogs.com/zernmal/

防止浏览器拦截的window.open新窗口方案的更多相关文章

  1. JS判断鼠标进入容器方向的方法和分析window.open新窗口被拦截的问题

    1.鼠标进入容器方向的判定 判断鼠标从哪个方向进入元素容器是一个经常碰到的问题,如何来判断呢?首先想到的是:获取鼠标的位置,然后经过一大堆的if..else逻辑来确定.这样的做法比较繁琐,下面介绍两种 ...

  2. location.href 本窗口与window.open 新窗口打开用法

    二种新窗口打开的区别: window.open("URL",'top'); 只是表示打开这个页面,并不是打开并刷新页面: window.location.href="UR ...

  3. UWP Test Webview JS interact, new window open (新窗口打开)

    using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Run ...

  4. Google 浏览器设置打开超链接到新窗口标签页

    一.windows  按住Ctrl + 鼠标点击,在新窗口打开,停留在当前页面: 按住Ctrl + Shift + 鼠标点击,在新窗口打开,停留在新窗口: 登录Google账号,管理Google账号, ...

  5. 设置Safari浏览器在标签栏上打开新窗口,而不是弹出一个新窗口

    打开Safari浏览器的偏好设置,如图: 打开“标签”一项,如上图.在“在标签(而不是窗口)中打开页面:”中设置.

  6. ajax请求成功后打开新窗口地址

    转自:http://www.cnblogs.com/linjiqin/p/3148205.html jQuery.ajax({       "type":"post&qu ...

  7. JS~模拟表单在新窗口打开,避免广告拦截

    说起广告拦截,这应该是浏览器的一个特性,它会将window.open产生的窗口默认为一个广告,将它进行拦截,但有时,这不是我们所希望的,有时,我们就是需要它在客户端的浏览器上弹出一个新窗口,以展示数据 ...

  8. window.open打开新窗口被浏览器拦截的处理方法

    一般我们在打开页面的时候, 最常用的就是用<a>标签,如果是新窗口打开就价格target="_blank"属性就可以了, 如果只是刷新当前页面就用window.loca ...

  9. ajax请求响应中用window.open打开新窗口会被浏览器拦截的解决方式

    一.问题描述 ajax 异步请求成功后需要新开窗口打开 url,使用的是 window.open() 方法,但是会被浏览器给拦截了,需要用户点下. 二.问题分析 浏览器之所以拦截新开窗口是因为该操作并 ...

随机推荐

  1. Java Proxy

    Client---->Interface A --        -- 代理类     Class AImpl 代理类是动态生成的,借助Proxy类和InvocationHandler接口进行实 ...

  2. IFrame 获取内容

    试试: iframe.contentwindow.document.documentElement.innerHTML   document.getElementById("MyIFrame ...

  3. Smart210学习记录------paltform总线

    转自http://blog.csdn.net/xiaochongtou123/article/details/7752328 1.概述: 通常在Linux中,把SoC系统中集成的独立外设单元(如:I2 ...

  4. Aborting commit: 'XXXXXXXX'remains in conflict错误

    今天在提交项目文件到本地SVN时提示错误如下: 过期:”global.php“在事务”21-1“, You have to update your working copy first. 运行upda ...

  5. Day01_JAVA语言基础第一天

    1.计算机基础知识(理解) 1.计算机硬件 软件的基础设施,就是载体,计算机的硬件由五大组成部件:运算器,控制器,存储器,输入设备和输出设备 2.计算机软件 系统软件:windows,MAC,LINU ...

  6. TCP/IP各层主要功能

    第一层:网路接口层(物理层和链路层) 提供TCP/IP协议的数据结构和实际物理硬件之间的接口.物理层的任务就是为它的上一层提供一个物理连接, 以及它们的机械.电气.功能和过程特性.链路层的主要功能是如 ...

  7. Core Java Volume I — 1.2. The Java "White Paper" Buzzwords

    1.2. The Java "White Paper" BuzzwordsThe authors of Java have written an influential White ...

  8. 主机控制器接口(HCI)

    主机控制器接口(HCI)提供了一种访问蓝牙硬件能力的通用接口. HCI固件通过访问基带命令.链路管理器命令.硬件状态寄存器.控制寄存器以及事件寄存器实现对蓝牙硬件的HCI命令. HCI是通过包的方式来 ...

  9. 蓝牙SIG

    蓝牙SIG 蓝牙SIG是一个国际性的非营利组织,它的目的是制定蓝牙的技术规范和推广蓝牙技术的应用.该组织由发起会员(Promoter).合作会员(Associate Member)和接受会员(Adop ...

  10. centos 主从复制

    1.主服务器rpm安装mysql 2.复制一台服务器叫slave(从服务器),一会儿要用 3.在主服务器,修改my.cnf文件 找到server-id,在它的下面加上 binlog-do-db = h ...