window.open()被拦截问题

最近做项目的时候遇到一个需求,在商品详情页面中点击购买按钮,之后再新标签页中打开生成的订单页面,所以想用window.open()来实现。但是测试的时候发现打开的链接被浏览器拦截。

之后,开始在网上查找解决方案,看到最常用的一个是新建一个a标签,模拟点击测试,多次测试后发现并没有用。然后又尝试了几个其他常见的方法,还是都会被拦截。

然后,发现window.open()拦截是有条件的。一般通过用户的点击事件触发的在新标签页中打开链接,浏览器是不会拦截的,因为这种形式打开新窗口浏览器会认为是用户自己需要的。

在我的项目中,是需要在ajax异步请求成功后需要在新窗口中打开返回的url地址,使用window.open()会被拦截,因为这种情况下浏览器认为该操作不是用户主动触发的,所以会拦截。

解决办法:

ajax请求由异步改为同步。(async:false)   (测试有效)。

时间: 2024-11-01 20:52:24

window.open()被拦截问题的相关文章

关于window.open()被拦截

原先window.open('www.baidu.com')是可以直接执行,不会被拦截 但现在改了代码,有了判断,windo.open被放入了ajax的回调中,此时,谷歌就会对弹出的页面进行拦截了 经测试,ajax回调或者click之类的事件,谷歌都会拦截,ie属性内核不会 解决方法为:新建页面,然后再去改属性 var newTab = window.open('about:blank'); newTab.location.href = "www.baidu.com"

ajax请求成功后新窗口window.open()被拦截的解决方法

ajax 异步请求成功后需要新开窗口打开 url,使用的是 window.open() 方法,但是该操作并不是用户主动触发的,所以它认为这是不安全的就拦截了(不过如果是 _self 的话就不会有这个限制),即使 ajax 回调函数中模拟执行 click 或者 submit 等用户行为(trigger('click')),浏览器也会认为不是由用户主动触发的,因此不能被安全执行,所以被拦截. 解决方法: 1.异步改为同步,即:async:false 2.将新开窗口指向为一个对象,然后修改对象的 ur

window.open() 被拦截后的分析

前言:此文章仅是个人工作中遇到问题后的一些记录和总结,可能毫无意义.. 事件回顾: 在开发中,PM要求在一个页面中输入多个链接然后可以一键在新窗口打开,所以就想到用window.open来实现,但是测试的时候发现会被拦截 分析: 关于window.open的用户很多前辈都有写过相关文章,就不在这里介绍了,查看window.open用法 针对不同的浏览器做了以下测试 1.用户点击事件内,触发打开一个新窗口 用户点击事件触发新窗口是例如: obj.onclick=function(){ window

ajax请求window.open()被拦截

项目使用ajax post后根据返回的success,需要打开一个新页面,使用window.open发现谷歌浏览器直接被拦截. 后来了解发现该操作并不是用户主动触发的,所以它认为这是不安全的就拦截了,即使 ajax 回调函数中模拟执行 click 或者 submit 等用户行为(trigger('click')), 浏览器也会认为不是由用户主动触发的,因此不能被安全执行,所以也会被拦截.废话不多说,直接上终极解决办法 解决方法: var newwin = window.open(); // 这句

一次解决页面特效问题的排查记录

大家在做项目的时候,肯定会和我一样,碰到各种各样的问题,然后熟练的打开搜索引擎,输入些关键字,开始解决问题.最近在做一个效果,中间就碰到了各种问题,接下来我把解决这个问题的过程发出来分享下,也算是我的一个小心得. 要做的效果其实很简单,就是在做支付的时候,出现一个弹出层,然后跳到一张新页面,类似于下面两张图片的效果: 页面一 页面二 这里面就是两个技术点,一个是弹出层的实现,另外一个就是通过脚本弹出一个新页面.出现弹出层这个很好解决,我使用了一个方便的插件artDialog.第二个问题弹出一个新

Android4.4   Input模块笔记

在InputReader从EventHub中获取输入事件,包含触摸屏事件.物理按键事件等,然后转交给InputDispatcher线程,InputDispatcher经过筛选,过滤输入事件.对于触摸事件通过调用findTouchedWindowTargetsLocked()函数找到合适的InputTarget,然后通过dispatchEventLocked()->prepareDispatchCycleLocked()->enqueueDispatchEntriesLocked()->e

window.open被浏览器拦截的解决方案

现象 最近在做项目的时候碰到了使用window.open被浏览器拦截的情况,搞得人无比郁闷啊,虽然在自己的环境可以对页面进行放行,但是对用户来说,不能要求用户都来通过拦截.何况当出现拦截时,很多小白根本不知道发生了啥,不知道在哪里看被拦截的页面,简直悲催啊~~. 另外,可以发现,当window.open为用户触发事件内部或者加载时,不会被拦截,一旦将弹出代码移动到ajax或者一段异步代码内部,马上就出现被拦截的表现了. 原因分析&深入研究 当浏览器检测到非用户操作产生的新弹出窗口,则会对其进行阻

window.open浏览器弹出新窗口被拦截—原因分析和解决方案

最近在做项目的时候碰到了使用window.open被浏览器拦截的情况,在本机实验没问题,到了服务器就被拦截了,火狐有拦截提示,360浏览器拦截提示都没有,虽然在自己的环境可以对页面进行放行,但是对用户来说,不能要求用户都来通过拦截.何况当出现拦截时,很多小白根本不知道发生了啥,不知道在哪里看被拦截的页面,百思不得其解,后来查了一下,各家浏览器支持的不一样. 另外,可以发现,当window.open为用户触发事件内部或者加载时,不会被拦截,一旦将弹出代码移动到ajax或者一段异步代码内部,马上就出

js实现window.open不被拦截的解决方法汇总

一.问题: 今天在处理页面ajax请求过程中,想实现请求后打开新页面,就想到通过 js window.open 来实现,但是最终都被浏览器拦截了. 二.分析: 在谷歌搜索有没有解决方法,有些说可以通过新建a标签,模拟点击来实现,但是测试发现都实现不了,照样被浏览器拦截.最后找到了一个折中的办法,可以实现新页面打开,但是没有a标签的那种直接流量新页面的效果. 三.实现代码: $obj.click(function(){ var newTab=window.open('about:blank');