window.open不生效
有些情况下我们不使用a标签要打开一个新窗口,可以window.location.href = url,但是这样打开是在当前窗口打开,如果使用window.open(),在非用户触发的情况下是会被浏览器安全机制拦截的。
$(".btn").on("click",function(){window.open(url);
})
这个是生效的,因为是用户触发的
$(".btn").on("click",function(){$.post("url",function(data){if(data = "10000"){window.open(url);}})
});
这样是不生效的,会被浏览器所拦截,在苹果系统下是提示都没有,一般浏览器有的直接也可以打开,有的会提示出现拦截窗口,需要手动打开。
解决办法:
$(".j_addKejian").on("click",function(){$.post("getcampusname.php",function(data){var data = JSON.parse(data);var winForsafari;if(data.code == "10000"){var dataList = data.data;var dataListlen = dataList.length;var btnHtml = '';var schoolId;for(var i = 0;i<dataListlen;i++){btnHtml += '<span class="setUpkejian_btn" schoolId = "'+dataList[i].id+'">'+dataList[i].name+'</span>';}G.alert({"title":"提示","pclass":"addkejian","css": {width : 840},"text":btnHtml,"init":function(){ //事件预留区域$(".setUpkejian_btn").on("click",function(){$(this).addClass("cur").siblings().removeClass("cur");schoolId = $(this).attr("schoolId");});},"alert":function(){ //点击确认this._remove();winForsafari = window.open("", "_blank"); //解决非用户触发情况下不生效问题winForsafari.location.href = ('createtask.php?create=1&campusid='+schoolId);}});}else{winForsafari = window.open("", "_blank"); //解决非用户触发情况下不生效问题winForsafari.location.href = 'createtask.php?create=1';//改变页面的 location}});
在请求数据之前先定义一个变量,然后再去改变窗口的location就可以了。
补:
再换一种方式,在页面上增加a标签
//打开新窗口(防止window.open被拦截)
var openNewWindow = function(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();
}
然后直接调用就可以了,传上要打开的新地址,和a标签定义一个id
再次补充:上面这个定义的方法如果放在ajax回调函数中依然是不生效,最后的最后解决办法只能是来控制点击的按钮了,改变href,这样才能更好的打开,不会被拦截。
window.open不生效相关推荐
- 微信小程序全局配置文件app.json中window:backgroundColor“不生效”
那些年我们一起踩过的坑~ 今天说一下微信小程序全局配置文件app.json中window的backgroundColor属性,设置之后发现没效果. 查了资料发现原来这个backgroundColor属 ...
- linux监听火狐浏览器关闭,火狐浏览器window.close()关闭无效
我想很多开发者遇到过这样一个比较容易的问题:就是在火狐浏览器中无法关闭当前页面的事情.其实这是火狐浏览器为了安全起见,对他自己属性进行设定了特殊值导致的.如下就是解决方法: 解决javascript: ...
- vue组件mounted中window.onresize无效
一.问题描述 在开发中发现,有两个vue组件中mounted中都用了window.onresize,但是在其中一个组件中正常,在另一个组件中无效. 二.问题分析 我注意到组件A是组件B的父组件,组件A ...
- window.onresize和window.addEventListener
vue中在mounted中window.onresize不生效是因为: 引用的父组件和子组件都使用了window.onresize以至于一个window.onresize失效. 把window.onr ...
- threejs 绘制球体_ThreeJs 绘制点、线、面
所有的三位物体都是由点构成,两点构成线,三点构成面,ThreeJs又如何绘制出点.线.面呢 ? 在ThreeJs中: 模型由几何体和材质构成 模型以何种形式(点.线.面)展示取决于渲染方式 1. 几何 ...
- created写法_在vue中created、mounted等方法使用小结
created:html加载完成之前,执行.执行顺序:父组件-子组件 mounted:html加载完成后执行.执行顺序:子组件-父组件 methods:事件方法执行 watch:watch是去监听一个 ...
- Linux日常运维管理技巧(一)监控系统状态、监控网卡流量、监控IO性能、查看系统进程、查看网络状态、Linux下抓包tcpdump、Linux网络相关、DNS配置
目录 监控系统状态 监控网卡流量 监控IO性能 查看系统进程 查看网络状态 Linux下抓包 Linux网络相关 监控系统状态 w/uptime查看系统负载 [root@zyshanlinux-01 ...
- HTML5---新增客户端储存
H5-新增API 本地存储 随着互联网的快速发展,基于网页的应用越来越普遍, 同时也变的越来越复杂,为了满足各种各样的需求,会经常性在本地存储大量的数据, HTML5规范提出了相关解决方案. 主流的浏 ...
- apicloud菜鸟教程_APICloud 对象之 Method
//openWin 打开window 若 window 已存在,则会把该 window 显示到最前面 api.openWin({ name:'page1', url:'./page1.html', p ...
最新文章
- MySql JDBC
- shell 去除 字符串中的双引号
- C++ - 给出一个函数来连接两个字符串A和B,其中字符串A的后几个字节和字符串B的前几个字节重叠
- 一个栈桢对应着一个方法
- Spring Shell项目发布
- 如何在苹果官网下载旧版本的Xcode 方法
- 4699元!三星Galaxy A90 5G国行版开启预售 10月25日正式开售
- virtualenvwrapper
- 进击的小程序:品牌自营GMV同比增长210%,这些行业增速最快……
- Tensorflow官方文档学习理解 (四)-深入MNIST
- linux编译安装rrdtool,Linux下RRDTool安装方法
- 单片机4*4矩阵键盘的原理
- SpringCloud 微服务工具集v1.1
- [ICCV 2019] Few-Shot Learning with Global Class Representations
- 杭州辣府餐饮JAVA_超全“滨江美食必打卡list”,不收藏会后悔!年前再去搓几顿啊~...
- 第5-2课:图的拓扑排序
- vue antd table customRender 自定义标签
- 深度学习数学基础——矩阵微分篇
- Yade 安装时编译错误求问
- When are two methods alike?