防止浏览器拦截的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() 方法,但是会被浏览器给拦截了,需要用户点下. 二.问题分析 浏览器之所以拦截新开窗口是因为该操作并 ...
随机推荐
- 0816 1459 json & pickle ,目录导入,目录规范
---恢复内容开始--- 1.json & pickle 磁盘上只能存储字符串或二进制数据,直接存字典.列表.元组等是存不了的,所以需要把各种数据转换成字符串格式,然后再存到硬盘. 直接将一个 ...
- ERP联系记录管理(十七)
联系记录管理修改页面: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Co ...
- swift系统学习控件篇:UITableView+UICollectionView
工作之余,学习下swift大法.把自己的学习过程分享一下.当中的布局很乱,就表在意这些细节了.直接上代码: UITableView: // // ViewController.swift // UIt ...
- Linux交叉开发环境搭建 —— 效率之源
楼主今天终于把所有Linux开发环境需要的软件下载完毕了.虽然以前也是搭建过的,时间久了又折腾了一晚上. 交叉环境: Windows.Linux文件共享 SecureCRT 连接虚拟机终端 工具: V ...
- 怎么在手机浏览器上访问电脑本地的文件,局域网内,自建WiFi也可以
首先,电脑要有Mysql+Apache+PHP环境,我直接用Wampsever,开启环境后手机和电脑要再同一个局域网内,然后电脑上打开win+R,输入cmd,再输入ipconfig,就可以看着这台的电 ...
- LeetCode Binary Tree Postorder Traversal(数据结构)
题意: 用迭代法输出一棵二叉树的后序遍历结果. 思路: (1)用两个栈,一个存指针,一个存标记,表示该指针当前已经访问过哪些孩子了. /** * Definition for a binary tre ...
- eclipse中文乱码
问题描述: 在导入log4j.properties文件时里面出现中文乱码,如下: ### 设置### log4j.rootLogger = debug,stdout,D,E ### è¾å ...
- 修改数据库mysql字符编码为UTF8
Mysql数据库是一个开源的数据库,应用非常广泛.以下是修改mysql数据库的字符编码的操作过程. 步骤1:查看当前的字符编码方法 mysql> show variables like'char ...
- 235. Lowest Common Ancestor of a Binary Search Tree
代码如下: /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; ...
- Qt 串口学习3
1.怎样将选择波特率 1)使用if else 的方法 if(ui->BaudRate->currentText()==tr("9600")) //根据组合框 ...