window.open()新开网页被拦截
问题:同一个项目,同一个浏览器,不同模块,相同的代码(同是window.open()),为何一个直接打开,另一个直接被拦截?
原因:查资料发现为浏览器的广告拦截功能导致。
补充:
1、一般情况下,js中用window.open()新开一个tab页面,浏览器会进行拦截,认为打开的是一个广告页;
2、若将此执行放在用户点击时触发,浏览器会认为是用户想访问这个网页,而并不是你主动弹出给用户;
3、用户点击时触发的函数中,若有多个window.open(),第一个不会被拦截,后面其他的会被拦截;
4、用户点击触发的函数中,若有异步请求,而window.open()放在异步请求的回调函数中,也会被拦截;
解决方法:
宗旨——>将其伪装为用户触发的操作
1、使用a标签替代;
给出如下函数,将此函数绑定到click的事件回调中,就可以避免大部分浏览器对窗口弹出的拦截:
function newWin(url, id) {
    var a = document.createElement(‘a‘);
    a.setAttribute(‘href‘, url);
    a.setAttribute(‘target‘, ‘_blank‘);
    a.setAttribute(‘id‘, id);
   // 防止反复添加
   if(!document.getElementById(id)) {                     
      document.body.appendChild(a);
   }
   a.click();
  }
2.使用form的submit方法打开一个页面
这种方法需要构造一个from,然后由js代码触发form的submit,将表单提交到一个新的页面,如:
$("#tijiaos").attr('target', '_blank');
        $("#tijiaos").submit();
3.先弹出窗口,再重定向到目标页面
第三种方案,其实是一种变通方案,核心思想是:先通过用户点击打开页面,然后再对页面进行重定向。示例代码如下:
xx.addEventListener(‘click‘, function () {
   // 打开页面,此处最好使用提示页面
   var newWin = window.open(‘loading page‘);
ajax().done(function() {
   // 重定向到目标页面
    newWin.location.href = ‘target url‘;
   });
        });
以上方法其实是打开了两个地址,所以建议大家打开第一个地址的时候给出一个类似‘当前页面正在加载中,请稍后。。’的简单提示页,这样可以避免打开两次真正的目标页面,让用户察觉到页面的重定向
扩展:
S打开新窗口的2种方式
1.超链接<ahref="http://www.jb51.net" title="脚本之家">Welcome</a>
等效于js代码
window.location.href="http://www.jb51.net"; //在同当前窗口中打开窗口
2.超链接<ahref="http://www.jb51.net" title="脚本之家"target="_blank">Welcome</a>
等效于js代码
window.open("http://www.jb51.net"); //在另外新建窗口中打开窗口
3、关闭新窗口:
this.window.opener =null;
window.close();
window.open()新开网页被拦截的更多相关文章
- 解决java新开页面被拦截的问题
		
在开发中遇到from表单利用 target="_blank" 属性新开页面时被拦截. 用ajax让form表单提交,这时有可能浏览器会拦截新开页面,这时只 需要设置 ajax 同步 ...
 - JS判断鼠标进入容器方向的方法和分析window.open新窗口被拦截的问题
		
1.鼠标进入容器方向的判定 判断鼠标从哪个方向进入元素容器是一个经常碰到的问题,如何来判断呢?首先想到的是:获取鼠标的位置,然后经过一大堆的if..else逻辑来确定.这样的做法比较繁琐,下面介绍两种 ...
 - window.open新打开窗口与新开标签页
		
最近在使用window.open时忽略了一个细节问题:window.open新打开一个窗口,但是有时却是新打开一个窗口有时打开一个新标签页.虽然对一般的需求来说,这个两种情况都无所谓,但是对于那种有强 ...
 - ajax回调打开新窗体防止浏览器拦截有效方法
		
ajax回调打开新窗体防止浏览器拦截,就这么做! 问题剖析: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 function click_fun(){ window ...
 - webdriver高级应用- 浏览器中新开标签页(Tab)
		
#encoding=utf-8 import unittest from selenium import webdriver import time import win32api, win32con ...
 - WIN7只能上QQ打不开网页,使用CMD输入netsh winsock reset
		
此类问题可以用腾讯电脑管家电脑诊所一键修复,请点击上方的[立即修复]即可. 附:手动修复步骤(来源:腾讯电脑管家电脑诊所,自动修复请点击上方的[立即修复])方案一:手动设置DNS(说明:如果您使用DN ...
 - 从实验室搬到宿舍后可以上QQ但打不开网页
		
如果你是属于如标题这种情况:也就是从实验室换到宿舍或者从宿舍换到实验室,在之前的地方可以上网,但换了地方后就出现只能上QQ而不能打开网页的情况.此时,首先考虑DNS配置,很有可能是因为你搬到了宿舍,但 ...
 - WebView重定向新开界面问题-b
		
首先介绍下这个问题,iOS上WebView 如果想更贴近native,就要加载新URL的时候新开个界面,但是如果加载的链接有重定向的话,就会在中间开一个空白的界面,这个好烦.然后就是解决这个问题,采用 ...
 - 其它网页可以上网,IE浏览器打不开网页的解决办法
		
下面是自己引用别人的,作为自己的备注 昨天由于安装了多款软件,今天开机发现IE浏览器打不开了,废了些周折终于,修复了IE浏览器,现将ie浏览器打不开网页的经验分享给大家,希望此经验对于出现过此类情况的 ...
 
随机推荐
- Git安装配置,和使用的简介
			
方案1:安装Git和TortoiseGit,使用TortoiseGit的图形化界面管理项目代码 材料准备: Git安装包 TortoiseGit安装包 注:包资源,可疑百度搜索,在Git官网下载 安装 ...
 - Game Engine Architecture 5
			
[Game Engine Architecture 5] 1.Memory Ordering Semantics These mysterious and vexing problems can on ...
 - JASPER打印单据,标签开发培训, 界面开发培训
			
JASPER打印单据,标签开发培训软件:TIBC JASPER Studio.Jaspersoft Studio是一个专为JasperReports报表引擎而开发的报表设计器,是 iReport设计器 ...
 - Linux中Nginx安装教程
			
Nginx 是一个很强大的高性能Web和反向代理服务器,它具有很多非常优越的特性: 在连接高并发的情况下,Nginx是Apache服务器不错的替代品:Nginx在美国是做虚拟主机生意的老板们经常选择的 ...
 - gb2312,gbk,utf8的区别
			
GB2312编码大约包含6000多汉字(不包括特殊字符),编码范围为第一位b0-f7,第二位编码范围为a1-fe(第一位为cf时,第二位为a1-d3),计算一下汉字个数为6762个汉字.当然还有其他的 ...
 - 分组\聚合\F\Q查询
			
一.分组和聚合查询 1.aggregate(*args,**kwargs) 聚合函数 通过对QuerySet进行计算,返回一个聚合值的字典.aggregate()中每一个参数都指定一个包含在字典中的 ...
 - Joe Hocking - Unity in Action. 2nd Ed [2018]
			
Unity in Action. 2nd Ed, 一本关于unity开发的英文书籍,初中级 PDF格式 扫码时备注或说明中留下邮箱 付款后如未回复请至https://shop135452397.tao ...
 - L3-021 神坛(极角排序求三角形最小面积)
			
在古老的迈瑞城,巍然屹立着 n 块神石.长老们商议,选取 3 块神石围成一个神坛.因为神坛的能量强度与它的面积成反比,因此神坛的面积越小越好.特殊地,如果有两块神石坐标相同,或者三块神石共线,神坛的面 ...
 - jquery 中dataTable显示加载中,图片或文字
			
引入js文件 <script type="text/javascript" src="${basePath}/lib/datatables/1.10.0/jquer ...
 - JVM深入理解
			
JVM深入理解 一.JVM介绍 JVM应用百度百科的原话是: JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过 ...