防止浏览器拦截的window.open新窗口方案
背景
当前的浏览器为了保证用户体验,在很多场合下禁止了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新窗口方案的更多相关文章
- JS判断鼠标进入容器方向的方法和分析window.open新窗口被拦截的问题
1.鼠标进入容器方向的判定 判断鼠标从哪个方向进入元素容器是一个经常碰到的问题,如何来判断呢?首先想到的是:获取鼠标的位置,然后经过一大堆的if..else逻辑来确定.这样的做法比较繁琐,下面介绍两种 ...
- location.href 本窗口与window.open 新窗口打开用法
二种新窗口打开的区别: window.open("URL",'top'); 只是表示打开这个页面,并不是打开并刷新页面: window.location.href="UR ...
- UWP Test Webview JS interact, new window open (新窗口打开)
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Run ...
- Google 浏览器设置打开超链接到新窗口标签页
一.windows 按住Ctrl + 鼠标点击,在新窗口打开,停留在当前页面: 按住Ctrl + Shift + 鼠标点击,在新窗口打开,停留在新窗口: 登录Google账号,管理Google账号, ...
- 设置Safari浏览器在标签栏上打开新窗口,而不是弹出一个新窗口
打开Safari浏览器的偏好设置,如图: 打开“标签”一项,如上图.在“在标签(而不是窗口)中打开页面:”中设置.
- ajax请求成功后打开新窗口地址
转自:http://www.cnblogs.com/linjiqin/p/3148205.html jQuery.ajax({ "type":"post&qu ...
- JS~模拟表单在新窗口打开,避免广告拦截
说起广告拦截,这应该是浏览器的一个特性,它会将window.open产生的窗口默认为一个广告,将它进行拦截,但有时,这不是我们所希望的,有时,我们就是需要它在客户端的浏览器上弹出一个新窗口,以展示数据 ...
- window.open打开新窗口被浏览器拦截的处理方法
一般我们在打开页面的时候, 最常用的就是用<a>标签,如果是新窗口打开就价格target="_blank"属性就可以了, 如果只是刷新当前页面就用window.loca ...
- ajax请求响应中用window.open打开新窗口会被浏览器拦截的解决方式
一.问题描述 ajax 异步请求成功后需要新开窗口打开 url,使用的是 window.open() 方法,但是会被浏览器给拦截了,需要用户点下. 二.问题分析 浏览器之所以拦截新开窗口是因为该操作并 ...
随机推荐
- C++中的数组与指针
数组与指针看起来很像 int a[] = {1, 2 ,3}; int *p = a; 如此,我们可以p[0], p[1], p[2] 看起来,与直接使用数组名没什么两样,但是看这段代码 sizeof ...
- 通过一个Thinkphp完成多个项目
1.单独取压缩包中的Thinkphp文件夹 2.在单独的项目内创建一个引入文件 3.通过浏览器访问该index.php 会创建相应的目录
- python简介-copy
首先python的老家https://www.python.org/ 原文http://www.runoob.com/python/python-intro.html Python 简介 Python ...
- Windows 2008 R2防火墙,允许被ping
netsh firewall set icmpsetting 8 1. 准备 1) 原因 出于安全因素考虑,在Windows 2008 R2上是不允许从外部对其Ping ...
- dll强签名的由来和作用
C# dll强签名介绍 之前基本没有这个概念,直到有一天我们的dll被反编译了,导致我们的代码基本上被看到了,才想起来要保护dll的安全性,因为C#语言的在编译过程中会产生中间语言导致dll很容易被反 ...
- iOS-NSURLCache内存缓存
在IOS应用程序开发中,为了减少与服务端的交互次数,加快用户的响应速度,一般都会在IOS设备中加一个缓存的机制.使用缓存的目的是为了使用的应用程序能更快速的响应用户输入,是程序高效的运行.有时候我们需 ...
- GET请求和POST请求简单说明
一.概述 * HTTP/1.1协议共定义了8中请求方法:OPTIONS, HEAD, GET, POST, PUT, DELETE, TRACE, CONNECT. * GET方法和POST是我们使用 ...
- Runtime 、 Block
1 使用Block方式,对学生对象进行排序. 1.1 问题 在iOS4.0+ 和Mac OS X 10.6+ 中添加了Block概念,以对C语言进行扩展.在Block中可以定义参数列表.返回类型,还可 ...
- MINIX3 导读分析
一个操作系统的分析是属于一个非常庞大的工程,操作系统就像是一个人造的 人,每一个模块想完全发挥功效,很有可能需要很多模块的支持才能够实现.所 以在分析 MINIX3 时,我认为同时看多个模块对于理解 ...
- platanus
nohup platanus assemble -o Larrrea -f ../unknown_NoIndex_L000_R1.fastq ../unknown_NoIndex_L000_R2.f ...